home *** CD-ROM | disk | FTP | other *** search
/ Revolution - Das Atari CD Magazin 1997 / Revolution - Das Atari CD Magazin 1.iso / software / progtool / olga / olga.lzh / doku / OLGA.TXT < prev   
Text File  |  1996-12-05  |  76KB  |  2,538 lines

  1.                                  OLGA
  2.  
  3.              Object Linking for GEM Applications Rev. 1.2
  4.  
  5.                           05. Dezember 1996
  6.  
  7.                                  von
  8.  
  9.                              Thomas Much
  10.  
  11.  
  12. Inhaltsverzeichnis
  13. ==================
  14.  
  15.  1  Einleitung
  16.  
  17.  2  Was ist Object Linking?
  18.     2.1  Die OLGA-Architektur
  19.  
  20.  3  Installation des OLGA-Managers
  21.  
  22.  4  Das OLGA-Protokoll...
  23.     4.1  ...für Server und Client
  24.          4.1.1  OLE_INIT
  25.          4.1.2  OLGA_INIT
  26.          4.1.3  OLE_EXIT
  27.          4.1.4  OLE_NEW
  28.     4.2  ...aus der Sicht des Servers
  29.          4.2.1  OLGA_UPDATE
  30.          4.2.2  OLGA_GETINFO
  31.          4.2.3  OLGA_INFO
  32.          4.2.4  OLGA_RENAME
  33.          4.2.5  OLGA_BREAKLINK
  34.          4.2.6  OLGA_CLIENTTERMINATED
  35.     4.3  ...aus der Sicht des Clients
  36.          4.3.1  OLGA_OPENDOC
  37.          4.3.2  OLGA_CLOSEDOC
  38.          4.3.3  OLGA_LINK
  39.          4.3.4  OLGA_UNLINK
  40.          4.3.5  OLGA_UPDATED
  41.          4.3.6  OLGA_RENAMELINK
  42.          4.3.7  OLGA_LINKRENAMED
  43.          4.3.8  OLGA_LINKBROKEN
  44.          4.3.9  OLGA_START
  45.          4.3.10  OLGA_SERVERTERMINATED
  46.  
  47.  5  InplaceDrawing
  48.     5.1  ID4-Client
  49.          5.1.1  OLGA_GETOBJECTS
  50.          5.1.2  OLGA_ACTIVATE
  51.          5.1.3  OLGA_EMBED
  52.     5.2  ID4-Server
  53.          5.2.1  OLGA_EMBEDDED
  54.          5.2.2  OLGA_UNEMBED
  55.          5.2.3  OLGA_INPLACEUPDATE
  56.          5.2.4  CBDraw
  57.          5.2.5  CBUnembed
  58.  
  59.  6  Notification
  60.     6.1  OLGA_REQUESTNOTIFICATION
  61.     6.2  OLGA_RELEASENOTIFICATION
  62.     6.3  OLGA_NOTIFY
  63.  
  64.  7  Idle-Test
  65.  
  66.  8  Konfigurationsabfrage
  67.  
  68.  9  Das OLGA-Info-Dateiformat
  69.  
  70. 10  Down to the minimum
  71.    10.1  Server
  72.    10.2  Client
  73.  
  74. 11  Abschließende Hinweise
  75.  
  76. Anhang
  77. ======
  78.  
  79.  A  FAQ
  80.  
  81.  B  Glossar
  82.  
  83.  C  Liste der OLGA-Applikationen
  84.  
  85.  D  Dateien
  86.     D.1  OLGA.H
  87.     D.2  OLGA.INC
  88.     D.3  OLGA.INF
  89.  
  90.  E  History
  91.  
  92.  F  Künftige Weiterentwicklungen
  93.  
  94.  G  Kontakt
  95.  
  96.  H  Rechtliches
  97.  
  98.  I  Dank
  99.  
  100.  
  101.  
  102. 1  Einleitung
  103. *************
  104.  
  105. Dies ist die Anleitung zu OLGA 1.2, d.h. zum OLGA-Protokoll Revision
  106. 1.2 und zum OLGA-Manager Version 1.20 (beides vom 20.11.96).
  107.  
  108. Anwender werden sich vermutlich hauptsächlich für "Was ist Object
  109. Linking?" (siehe "Was ist Object Linking?") und die Installation des
  110. OLGA-Managers interessieren, aber auch im Anhang gibt es ein paar
  111. nützliche Informationen.
  112.  
  113. Programmierer sollten daneben auch einen Blick auf "Die OLGA-
  114. Architektur" (siehe "Die OLGA-Architektur") werfen, um einen Überblick
  115. über die Möglichkeiten zu bekommen. Außerdem ist der Rest dieser
  116. Dokumentation ganz speziell für sie bestimmt.
  117.  
  118. Bitte beachten Sie auch "Rechtliches".
  119.  
  120.  
  121.  
  122. 2  Was ist Object Linking?
  123. **************************
  124.  
  125. Object Linking (OL) dient zur besseren (automatischen) Interaktion
  126. zwischen verschiedenen Programmen. Wenn z.B. bei einem
  127. Vektorgrafikprogramm in einem Dokument (Vektorgrafik) ein beliebiges
  128. Objekt (hier z.B. eine Rastergrafik) dargestellt wird und dieses -
  129. eine Multitasking-Umgebung vorausgesetzt - von einem anderen Programm
  130. (hier also ein Rastergrafikprogramm) geändert wird, während beide
  131. Programme laufen, würde die Rastergrafik nach der Änderung (d.h. dem
  132. Speichern) in der Vektorgrafik automatisch neu angezeigt.
  133.  
  134. Ein solches OL ist recht einfach zu bewerkstelligen, damit aber
  135. beliebige Programme mit beliebigen Objekten kompatibel arbeiten
  136. können, wird ein etwas umfangreicheres Protokoll benötigt. Das OLGA-
  137. Protokoll leistet das gewünschte OL und hat den Vorteil, Bestandteil
  138. des neuen OLE-Protokolls zu sein, das OEP und OLGA umfaßt.
  139.  
  140. OLGA ist dokumentenzentriert, d.h. das Protokoll ist dafür
  141. vorbereitet, daß eine Applikation mehrere Dokumente (evtl. sogar mit
  142. komplett verschiedenen Datentypen) verwaltet.
  143.  
  144. Zur Verwaltung des OL wird ein OLGA-Manager (Manager) eingesetzt. Die
  145. Kommunikation bzgl. OL zwischen den Applikationen wird komplett über
  146. diesen Manager abgewickelt. Es kann immer nur einen Manager im System
  147. geben! Die Installation des OLGA-Managers ist im nächsten Abschnitt
  148. beschrieben.
  149.  
  150. Drei wichtige Begriffe sind noch zu klären: Ein OLGA-Client (Client)
  151. ist eine Applikation, mit der Dokumente bearbeitet werden können, in
  152. denen Objekte anderer Applikationen benutzt werden. Ein OLGA-Server
  153. (Server) ist eine Applikation, die die Bearbeitung dieser Objekte
  154. ermöglicht. Und wer das jetzt zu schnell durchgelesen hat und meint,
  155. daß beides identisch ist, hat nur ein kleines bißchen Unrecht: In der
  156. Tat ist es ohne Probleme möglich, daß eine Applikation gleichzeitig
  157. Server und Client ist - in den meisten Fällen ist dies sogar sehr
  158. sinnvoll. Die Programmierung eines Clients ist allerdings aufwendiger,
  159. das Erweitern einer bestehenden Applikation zu einem Server sollte
  160. dagegen nur wenige Minuten in Anspruch nehmen!
  161.  
  162. Die Verbindung zwischen Client und Server wird mit sog. Links
  163. hergestellt. Ein Link ist eine Referenz des Clients auf ein Objekt.
  164. Diese Referenz (bei OLGA ist das nur ein Dateiname mit absolutem Pfad)
  165. muß vom Client im Dokument gespeichert werden. Wenn nun ein Server ein
  166. Objekt ändert, auf das ein Link besteht, wird der Client davon
  167. unterrichtet und kann das geänderte Objekt neu darstellen.
  168.  
  169. Und jetzt bitte nicht gleich von dem langen Text abschrecken lassen,
  170. das meiste sind nur Informations- bzw. Bestätigungsmessages, die für
  171. das einfache Funktionieren des Protokolls gar nicht ausgewertet werden
  172. müssen. Weiter unten befindet sich eine Liste der Funktionen, die
  173. minimal unterstützt werden müssen ("Down to the minimum").
  174.  
  175.  
  176. 2.1  Die OLGA-Architektur
  177. =========================
  178.  
  179. Das OLGA-Architekturmodell zeigt die Verteilung der Dienste zwischen
  180. OLGA-Manager und der nutzenden Applikation (d.h. Client oder Server).
  181. Während Linking, InplaceDrawing und Notification auf einer recht
  182. ausgewogenen Kommunikation zwischen Manager und Applikation beruhen,
  183. obliegt das Embedding vollständig der Client-Applikation. Die Info-
  184. Dateien schließlich werden durch den Manager koordiniert, laufen aber
  185. dann direkt zwischen Server- und Client-Applikation ab. Schematisch
  186. sieht die Kommunikation in etwa wie folgt aus:
  187.  
  188.  
  189.  
  190. 3  Installation des OLGA-Managers
  191. *********************************
  192.  
  193. Zunächst sei noch einmal darauf hingewiesen, daß das OLGA-Protokoll
  194. zwingend ein Multitasking-Betriebssystem voraussetzt (MultiTOS, N.AES,
  195. MagiC etc.).
  196.  
  197. Man muß sich nun überlegen, ob man den OLGA-Manager ständig im
  198. Speicher haben möchte oder ob dieser bei Bedarf nachgeladen werden
  199. soll. Der erste Fall ist sehr einfach, man kopiert den Manager
  200. OLGA.APP einfach in das Wurzelverzeichnis der Bootpartition und
  201. benennt die Datei in OLGA.ACC um. Nach einem Neustart des Rechners
  202. steht OLGA nun permanent zur Verfügung.
  203.  
  204. Der andere Fall ist ein klein wenig komplizierter, hat aber den
  205. Vorteil, daß sich der OLGA-Manager nur dann im Speicher befindet, wenn
  206. auch eine OLGA-fähige Applikation geladen ist. Dazu kopiert man
  207. OLGA.APP an eine beliebige Stelle (z.B. C:\GEMSYS\OLGA\OLGA.APP) und
  208. setzt dann die Environmentvariable OLGAMANAGER auf diese Pfadangabe.
  209. Für MultiTOS trägt man dafür in GEM.CNF folgendes ein:
  210.  
  211.  
  212.   setenv OLGAMANAGER=C:\GEMSYS\OLGA\OLGA.APP
  213.  
  214.  
  215. MagiC erwartet in MAGX.INF folgende Zeile:
  216.  
  217.  
  218.   #_ENV OLGAMANAGER=C:\GEMSYS\OLGA\OLGA.APP
  219.  
  220.  
  221. Wird nun eine OLGA-fähige Applikation gestartet, wird der Manager
  222. automatisch nachgeladen. Außerdem entfernt sich ein so gestarteter
  223. Manager selber wieder aus dem System, sobald die letzte OLGA-fähige
  224. Applikation beendet wurde.
  225.  
  226. Wie sich OLGA in einer Applikation bemerkbar macht, hängt nur von
  227. dieser selbst ab. Um bei dem Beispiel des Vektorgrafikprogramms zu
  228. bleiben, könnte z.B. beim Doppelklick auf die Rastergrafik ein
  229. entsprechendes Rastergrafikprogramm nachgeladen werden. Damit sich ein
  230. Programm auch darum nicht selbst zu kümmern braucht, gibt es im OLGA-
  231. Protokoll die Möglichkeit, den Manager nach einer passenden
  232. Applikation suchen und diese dann starten zu lassen. Dazu muß
  233. allerdings der Anwender einmalig seine Lieblingskonfiguration
  234. festlegen, was in der Datei OLGA.INF geschieht. Diese Datei wird in
  235. das Verzeichnis von OLGA.APP bzw. OLGA.ACC kopiert (oder nach C:\ -
  236. allgemeiner: ins Wurzelverzeichnis des Bootlaufwerks - oder nach
  237. $HOME) und ist wie folgt aufgebaut:
  238.  
  239.  
  240. [Extensions]
  241. .EXT=Dateipfad+Programmname oder ein Alias
  242.    ...
  243.  
  244. [Types]
  245. XY=Dateipfad+Programmname oder ein Alias
  246.  ...
  247.  
  248. [Objects]
  249. .EXT=Klartextbeschreibung des Dateityps
  250.    ...
  251.  
  252. [Applications]
  253. Alias=Dateipfad+Programmname
  254.     ...
  255.  
  256.  
  257. Ein ausführliches, konkretes Beispiel findet sich im Abschnitt
  258. "OLGA.INF".
  259.  
  260. Im Block [Extensions] werden also die Programme eingetragen, die
  261. bestimmte Dateitypen besonders gut bearbeiten können. Dieses Verfahren
  262. ist von der Desktop-Funktion "Anwendung anmelden" bekannt. Pro
  263. Extension kann zur Zeit nur eine Applikation angegeben werden, was
  264. aber reichen sollte, schließlich kann der Benutzer hier sein
  265. "Lieblingsprogramm" eintragen.
  266.  
  267. Im Block [Typen] ist es dann noch möglich, bestimmten Programmtypen
  268. eine Applikation zuzuweisen. Z.B. kann man unter "ED" einen Editor
  269. eintragen, mit dem alle möglichen Textformate bearbeitet werden
  270. können. Folgende Typen sind bis jetzt definiert:
  271.  
  272.  
  273.                  +----+----------------------------+
  274.                  | WP | Textverarbeitung           |
  275.                  +----+----------------------------+
  276.                  | DP | DTP                        |
  277.                  +----+----------------------------+
  278.                  | ED | Texteditor                 |
  279.                  +----+----------------------------+
  280.                  | DB | Datenbank                  |
  281.                  +----+----------------------------+
  282.                  | SS | Tabellenkalkulation        |
  283.                  +----+----------------------------+
  284.                  | RG | Rastergrafikprogramm       |
  285.                  +----+----------------------------+
  286.                  | VG | Vektorgrafikprogramm       |
  287.                  +----+----------------------------+
  288.                  | GG | allgemeines Grafikprogramm |
  289.                  +----+----------------------------+
  290.                  | MU | Musikanwendung             |
  291.                  +----+----------------------------+
  292.                  | CD | CAD                        |
  293.                  +----+----------------------------+
  294.                  | DC | Datenkommunikation         |
  295.                  +----+----------------------------+
  296.                  | DT | Desktop                    |
  297.                  +----+----------------------------+
  298.                  | PE | Programmierumgebung        |
  299.                  +----+----------------------------+
  300.  
  301. Wem die Typen bekannt vorkommen: Es sind die beim XAcc-Protokoll
  302. verwendeten maschinenlesbaren Programmtypen.
  303.  
  304. [Objects] ist für InplaceDrawing (ID4-OLGA) interessant. Damit ID4
  305. funktioniert, müssen hier die von den vorhandenen ID4-Servern
  306. unterstützten Extensions eingetragen werden. Diese Extensions müssen
  307. auch in [Extensions] der entsprechenden Applikation zugeordnet sein.
  308.  
  309. [Applications] schließlich dient dazu, die Übersicht in OLGA.INF zu
  310. verbessern. Dieser Block ist optional und muß nicht verwendet werden.
  311.  
  312. Damit ist die Installation abgeschlossen.
  313.  
  314.  
  315.  
  316. 4  Das OLGA-Protokoll...
  317. ************************
  318.  
  319.  
  320. 4.1  ...für Server und Client
  321. =============================
  322.  
  323. ...entspricht dem OLE-Protokoll, daß Object Embedding mit OEP (Object
  324. Exchange Protocol) und Object Linking mit OLGA ermöglicht. Beide
  325. Protokolle (d.h. OEP und OLGA) werden mit denselben Messages evtl.
  326. gleichzeitig (!) initialisiert. Die genaue OEP-Dokumentation findet
  327. sich in der OEP-Distribution.
  328.  
  329. Das OLGA-Protokoll besteht im wensentlich aus dem Kommunikation mit
  330. dem OLGA- (bzw. OLE-) Manager. Dazu muß man die AES-ID des Managers
  331. kennen, die wie folgt ermittelt wird:
  332.  
  333.   1. Die Applikation benötigt OLE (=OEP+OLGA):
  334.  
  335.       (a) Wenn appl_find("OLEMANGR") erfolgreich ist, hat man den
  336.           Manager schon gefunden.
  337.  
  338.       (b) Ansonsten wird nun die Environmentvariable OLEMANAGER
  339.           ausgewertet. Dort kann ein kompletter Zugriffspfad stehen!
  340.           Zunächst extrahiert man aus diesem Pfad einen Programmnamen
  341.           für appl_find() und geht entsprechend wie unter a) vor.
  342.           Konnte auch dieser Name nicht gefunden werden, startet man
  343.           das Programm, das von OLEMANAGER bezeichnet wird, mit
  344.           shel_write() nach.
  345.  
  346.       (c) Wenn das bisherige nicht zum Erfolg geführt hat, gibt es
  347.           offensichtlich keinen OLE-Manager, man muß sich evtl. mit
  348.           dem OLGA-Protokoll begnügen. Dazu macht man - analog zu a) -
  349.           ein appl_find("OLGA ") und ein appl_find("OEP_SERV"). Evtl.
  350.           muß man nämlich nun zwei Manager unterstützen!
  351.  
  352.       (d) Konnte auch dieses Programm nicht gefunden werden, wertet
  353.           man nun noch die Environmentvariablen OLGAMANAGER und
  354.           OEPSERVER wie unter b) aus.
  355.  
  356.   2. Die Applikation benötigt nur OLGA:
  357.  
  358.      Das Verfahren entspricht dem von 1), nur die Reihenfolge ändert
  359.      sich zu c), d), a), b). Außerdem braucht man natürlich OEP_SERV
  360.      und OEPSERVER nicht abfragen, da es unwahrscheinlich ist, daß ein
  361.      OEP-Server das OLGA-Protokoll versteht.
  362.  
  363.  
  364. 4.1.1  OLE_INIT
  365. ---------------
  366.  
  367. Hat man einen (bzw. zwei, s.o.) Manager gefunden, schickt man ihm
  368. folgende Message:
  369.  
  370.  
  371. OLE_INIT
  372. (Client/Server -> Manager)
  373. msg[0] $4950 (18768)
  374. msg[1] apID
  375. msg[2] 0
  376. msg[3] OLGA: Bitmap, OL_SERVER und/oder OL_CLIENT gesetzt, OL_PIPES
  377. msg[4] OLGA: max. von der App. verstandene Stufe des Protokolls
  378.              (z.Z. immer 0)
  379. msg[5] OEP:  Bitmap, OL_OEP gesetzt
  380. msg[6] OEP:  reserviert (0)
  381. msg[7] maschinenlesbarer XAcc-Programmtyp (oder 0):
  382.              "WP" = Textverarbeitung
  383.              "DP" = DTP
  384.              "ED" = Texteditor
  385.              "DB" = Datenbank
  386.              "SS" = Tabellenkalkulation
  387.              "RG" = Rastergrafikprogramm
  388.              "VG" = Vektorgrafikprogramm
  389.              "GG" = allgemeines Grafikprogramm
  390.              "MU" = Musikanwendung
  391.              "CD" = CAD
  392.              "DC" = Datenkommunikation
  393.              "DT" = Desktop
  394.              "PE" = Programmierumgebung
  395.  
  396. OL_SERVER = $0001   Applikation ist OLGA-Server
  397. OL_CLIENT = $0002   Applikation ist OLGA-Client
  398. OL_PEER   = $0003   Applikation ist Client und Server
  399. OL_IDLE   = $0800   Applikation unterstützt den Idle-Test
  400. OL_PIPES  = $1000   Applikation möchte nicht über Pointer, sondern über
  401.                     MTOS-D&D-Pipes kommunizieren; der Manager meldet dann,
  402.                     ob er diese Kommunikation beherrscht bzw. ob sie auf
  403.                     dem aktuellen System möglich ist (s.u.); das Ver-
  404.                     fahren wird z.Z. noch nicht unterstützt, eine
  405.                     genauere Definition folgt später
  406. OL_OEP    = $0001   Applikation versteht OEP
  407.  
  408.  
  409. Wenn ein Protokoll von der Applikation nicht unterstützt wird, sind
  410. msg[3]/msg[4] bzw. msg[5]/msg[6] auszunullen!
  411.  
  412. Daraufhin erhält man vom Manager je nach Protokollauswahl eine
  413. OEP_CONFIG- und/oder eine OLGA_INIT-Message. Es wird dann nach den
  414. Beschreibungen des jeweiligen Protokolls fortgefahren.
  415.  
  416.  
  417. 4.1.2  OLGA_INIT
  418. ----------------
  419.  
  420. Der OLGA-Manager verschickt als Bestätigung die OLGA_INIT-Message.
  421. Wichtig: Applikationen sollten den OLGA-Mechanismus erst verwenden,
  422. nachdem sie folgende Message erhalten haben und diese keinen Fehler
  423. signalisiert hat (für Applikationen, die während der Startphase
  424. Dokumente öffnen, kann es sinnvoll sein, auch ohne empfangene
  425. OLGA_INIT-Message die nötigen OLGA- Messages zu verschicken, nur
  426. sollten bei der Applikation keine Fehlfunktionen auftreten, falls sich
  427. der Manager doch nicht meldet).
  428.  
  429.  
  430. OLGA_INIT
  431. (Manager -> Client/Server)
  432. [0] $1236 (4662)
  433. [1] apID
  434. [2] 0
  435. [3] Bitmap, OL_MANAGER gesetzt
  436. [4] Stufe des verwendeten (!) Protokolls (z.Z. immer 0)
  437. [5] 0
  438. [6] 0
  439. [7] 0=Fehler, sonst: OL-Mechanismus verfügbar
  440.  
  441. OL_IDLE    = $0800   Manager unterstützt den Idle-Test
  442. OL_PIPES   = $1000   Manager verwendet zur Kommunikation MTOS-D&D-Pipes
  443.                      (nur nach Anforderung, s.o., wird z.Z. noch nicht
  444.                      unterstützt und ist daher nie gesetzt!)
  445. OL_START   = $2000   Manager kann OLGA_START ausführen
  446. OL_MANAGER = $4000   Applikation ist der OLGA-Manager
  447.  
  448.  
  449.  
  450. 4.1.3  OLE_EXIT
  451. ---------------
  452.  
  453. Beim Programmende wird dem Manager folgende Message geschickt (die
  454. Nachricht wird außerdem von Manager an die Applikationen verschickt,
  455. sollte dieser terminieren). Wenn sich ein OLGA-Client abmeldet, werden
  456. automatisch alle zugehörigen Links und Documents gelöscht.
  457.  
  458.  
  459. OLE_EXIT
  460. (Client/Server -> Manager, Manager -> Client/Server)
  461. msg[0] $4951 (18769)
  462. msg[1] apID
  463. msg[2] 0
  464. msg[3] 0
  465. msg[4] 0
  466. msg[5] 0
  467. msg[6] 0
  468. msg[7] 0
  469.  
  470.  
  471.  
  472. 4.1.4  OLE_NEW
  473. --------------
  474.  
  475. Wenn ein Manager nachgestartet wird, verschickt er an alle
  476. erreichbaren Applikationen folgende Message:
  477.  
  478.  
  479. OLE_NEW
  480. (Manager -> Client/Server)
  481. msg[0] $4952 (18770)
  482. msg[1] apID
  483. msg[2] 0
  484. msg[3] OLGA: Bitmap (OL_MANAGER, OL_START, OL_PIPES, OL_IDLE)
  485. msg[4] OLGA: max. Manager-Stufe des OLGA-Protokolls
  486. msg[5] OEP:  OL_OEP ($0001) gesetzt, falls der Manager OEP beherrscht
  487. msg[6] OEP:  0, reserviert
  488. msg[7] Versionsnummer des Managers, z.B. $0114 für 1.14
  489.  
  490.  
  491. Nach Empfang und Auswertung dieser Message sollte eine Applikation
  492. OLE_INIT verschicken. Die Werte in OLE_NEW ersetzen nicht die Rückgabe
  493. von OEP_CONFIG bzw. OLGA_INIT, sie dienen nur zu Informationszwecken!
  494. (wenn z.B. ein neuer Manager nur ein Protokoll unterstützt, kann evtl.
  495. der alte Manager weiterverwendet werden)
  496.  
  497.  
  498. 4.2  ...aus der Sicht des Servers
  499. =================================
  500.  
  501.  
  502. 4.2.1  OLGA_UPDATE
  503. ------------------
  504.  
  505. Wenn der Server irgend eine Datei abgespeichert hat, wird an den
  506. OLGA-Manager folgende Message geschickt: (Die Groß-/Kleinschreibung
  507. des Dateinamens wird im Moment ignoriert, damit das Linking nicht an
  508. unterschiedlichen Benutzereingaben scheitert; auf erweiterten
  509. Filesystemen wird das später allerdings nicht mehr so sein.)
  510.  
  511.  
  512. OLGA_UPDATE
  513. (Server -> Manager)
  514. [0] $1238 (4664)
  515. [1] apID
  516. [2] 0
  517. [3]
  518.  +  Pointer auf den kompletten Dateinamen incl. (absolutem!) Pfad
  519. [4]
  520. [5] 0 bzw. Server-interne (eindeutige) Index-Nummer, falls eine Info-Datei
  521.     zur Verfügung steht oder erzeugt werden kann (s. OLGA_GETINFO)
  522. [6] 0
  523. [7] 0
  524.  
  525.  
  526. Als Antwort erhält der Server folgende Message, worauf er z.B.
  527. allozierten Speicherplatz für den Dateinamen wieder freigeben kann:
  528.  
  529.  
  530. OLGA_ACK
  531. (Manager -> Server)
  532. [0] $1239 (4665)
  533. [1] apID
  534. [2] 0
  535. [3]
  536.  +  exakt dieselben Wert von OLGA_UPDATE
  537. [4]
  538. [5] 0
  539. [6] 0
  540. [7] OLGA_UPDATE
  541.  
  542.  
  543.  
  544. 4.2.2  OLGA_GETINFO
  545. -------------------
  546.  
  547. Wenn der Server bei OLGA_UPDATE eine Index-Nummer für eine Info-Datei
  548. bekanntgegeben hat, kann ein Client (!) letztere nun direkt beim
  549. Server abfragen. Nach dem Empfangen von OLGA_GETINFO kann der Server
  550. eine solche Datei erzeugen (Aufbau s.u.), falls sie noch nicht
  551. existiert. Zu beachten ist, daß die übergebene Index-Nummer nicht
  552. gültig sein muß, die OLGA_GETINFO-Message muß dann vom Server
  553. ignoriert werden!
  554.  
  555.  
  556. OLGA_GETINFO
  557. (Client -> Server)
  558. [0] $1247 (4679)
  559. [1] apID
  560. [2] 0
  561. [3] 0
  562. [4] 0
  563. [5] Index-Nummer der gewünschten Info-Datei
  564. [6] 0
  565. [7] 0
  566.  
  567.  
  568.  
  569. 4.2.3  OLGA_INFO
  570. ----------------
  571.  
  572. Als Antwort auf OLGA_GETINFO verschickt der Server direkt an den
  573. Client (!) folgende Message (nachdem die Info-Datei erzeugt wurde -
  574. falls sie nicht sogar ständig vorhanden ist).
  575.  
  576.  
  577. OLGA_INFO
  578. (Server -> Client)
  579. [0] $1248 (4680)
  580. [1] apID
  581. [2] 0
  582. [3]
  583.  +  Pointer auf den kompletten Info-Dateinamen incl. (absolutem!) Pfad
  584. [4]
  585. [5] Index-Nummer der gewünschten Info-Datei
  586. [6] 0
  587. [7] 0
  588.  
  589.  
  590. Der Client darf sich allerdings nicht auf eine solche Antwort
  591. verlassen, der Server könnte ja mittlerweile terminiert haben.
  592. Außerdem darf der Client nur lesend auf die Datei zugreifen.
  593.  
  594. Sobald der Client die Datei wieder geschlossen hat, teilt er dies dem
  595. Server direkt (!) mit, damit dieser die Datei evtl. wieder löschen
  596. kann.
  597.  
  598.  
  599. OLGA_ACK
  600. (Client -> Server)
  601. [0] $1239 (4665)
  602. [1] apID
  603. [2] 0
  604. [3]
  605.  +  exakt dieselben Werte von OLGA_INFO
  606. [4]
  607. [5] Index-Nummer der gewünschten Info-Datei
  608. [6] 0
  609. [7] OLGA_INFO
  610.  
  611.  
  612.  
  613. 4.2.4  OLGA_RENAME
  614. ------------------
  615.  
  616. Wenn der Benutzer eine Datei im Server umbenennt (oder verschiebt!),
  617. schickt der Server dem Manager die OLGA_RENAME-Message. Es liegt im
  618. Ermessen des Servers, ob er nach "Speichern als..." eine solche
  619. Message verschickt (das hängt z.B. auch davon ab, ob der Server selbst
  620. die neue Pfadangabe bzw. den neuen Dateinamen für das bestehende
  621. Dokument übernimmt); nach Möglichkeit sollten Links aber immer nur für
  622. Dateien auf nicht wechselbaren Medien bestehen (A: und B: sind also
  623. denkbar schlechte Kandidaten). Wenn zusätzlich der Dateiinhalt
  624. verändert wurde, muß außerdem noch eine OLGA_UPDATE-Message verschickt
  625. werden!
  626.  
  627.  
  628. OLGA_RENAME
  629. (Server -> Manager)
  630. [0] $123a (4666)
  631. [1] apID
  632. [2] 0
  633. [3]
  634.  +  Pointer auf den alten Dateinamen incl. absolutem Pfad
  635. [4]
  636. [5]
  637.  +  Pointer auf den neuen Dateinamen incl. absolutem Pfad
  638. [6]
  639. [7] 0
  640.  
  641.  
  642. Als Antwort erhält der Server wiederum eine Message, die er z.B. zum
  643. Freigeben des alten Speicherplatzes verwenden kann. Diese Bestätigung
  644. bedeutet allerdings nur, daß der Manager das Umbenennen weitergemeldet
  645. hat, wenn ein Client nicht darauf reagiert, ist der entsprechende Link
  646. dann "tot".
  647.  
  648.  
  649. OLGA_ACK
  650. (Manager -> Server)
  651. [0] $1239 (4665)
  652. [1] apID
  653. [2] 0
  654. [3]
  655.  +  exakt dieselben Wert von OLGA_RENAME
  656. [4]
  657. [5]
  658.  +  exakt dieselben Wert von OLGA_RENAME
  659. [6]
  660. [7] OLGA_RENAME
  661.  
  662.  
  663.  
  664. 4.2.5  OLGA_BREAKLINK
  665. ---------------------
  666.  
  667. Sollte der Server eine Datei löschen (oder anderweitig für den Client
  668. unbrauchbar machen), muß er dies dem Manager mit folgender Message
  669. mitteilen. Der Manager verständigt dann alle Clients, die einen Link
  670. auf diese Datei gesetzt hatten.
  671.  
  672.  
  673. OLGA_BREAKLINK
  674. (Server -> Manager)
  675. [0] $1244 (4676)
  676. [1] apID
  677. [2] 0
  678. [3]
  679.  +  Pointer auf den Dateinamen incl. absolutem Pfad
  680. [4]
  681. [5] 0
  682. [6] 0
  683. [7] 0
  684.  
  685.  
  686. Auch hierauf verschickt der Manager eine Antwort an den Server:
  687.  
  688.  
  689. OLGA_ACK
  690. (Manager -> Server)
  691. [0] $1239 (4665)
  692. [1] apID
  693. [2] 0
  694. [3]
  695.  +  exakt dieselben Wert von OLGA_BREAKLINK
  696. [4]
  697. [5] 0
  698. [6] 0
  699. [7] OLGA_BREAKLINK
  700.  
  701.  
  702.  
  703. 4.2.6  OLGA_CLIENTTERMINATED
  704. ----------------------------
  705.  
  706. Wenn ein Client terminiert, der einen Server per OLGA_START aufgerufen
  707. hat, erhält dieser Server folgende Message:
  708.  
  709.  
  710. OLGA_CLIENTTERMINATED
  711. (Manager -> Server)
  712. [0] $1255 (4693)
  713. [1] manID
  714. [2] 0
  715. [3] AES-ID des terminierten Clients
  716. [4] Anzahl der Clients, die den Server noch benutzen (>=0)
  717. [5] 0
  718. [6] 0
  719. [7] 0
  720.  
  721.  
  722.  
  723. 4.3  ...aus der Sicht des Clients
  724. =================================
  725.  
  726.  
  727. 4.3.1  OLGA_OPENDOC
  728. -------------------
  729.  
  730. Wenn ein OLGA-Client ein Dokument öffnet (egal ob schon bestehend oder
  731. neu), kann (!) dem OLGA-Manager folgende Message geschickt werden. Sie
  732. dient z.Z. nur zu Informationszwecken, die benötigten internen
  733. Strukturen werden vom Manager ansonsten beim Empfangen der ersten
  734. OLGA_LINK-Message angelegt. Die Gruppenkennung sollte allerdings
  735. trotzdem (wenn auch nur Client-intern) festgelegt werden, da sie für
  736. die Links benötigt wird.
  737.  
  738.  
  739. OLGA_OPENDOC
  740. (Client -> Manager)
  741. [0] $123b (4667)
  742. [1] apID
  743. [2] 0
  744. [3] 0
  745. [4] 0
  746. [5] Gruppenkennung (eine innerhalb des Clients eindeutige, vom Client
  747.     frei wählbare Zahl, mit der die Links innerhalb des Clients den
  748.     Dokumenten zugeordnet werden können)
  749. [6] 0
  750. [7] 0
  751.  
  752.  
  753. Als Antwort erhält der Client folgende Message:
  754.  
  755.  
  756. OLGA_ACK
  757. (Manager -> Client)
  758. [0] $1239 (4665)
  759. [1] apID
  760. [2] 0
  761. [3] 0
  762. [4] 0
  763. [5] Gruppenkennung des Dokuments
  764. [6] 0
  765. [7] OLGA_OPENDOC
  766.  
  767.  
  768.  
  769. 4.3.2  OLGA_CLOSEDOC
  770. --------------------
  771.  
  772. Schließt ein Client ein Dokument, das Links enthält, sollte dem OLGA-
  773. Manager folgende Message geschickt werden, die alle Links mit der
  774. entsprechenden Gruppenkennung löscht. Das kann zwar auch mit einzelnen
  775. OLGA_UNLINK-Aufrufen geschehen, aber so können Manager-interne
  776. Strukturen einfacher freigegeben werden (außerdem ist es einfacher für
  777. den Programmierer :-). Darf beim Programmende nicht verwendet werden,
  778. da OLE_EXIT alle Documents löscht.
  779.  
  780.  
  781. OLGA_CLOSEDOC
  782. (Client -> Manager)
  783. [0] $123c (4668)
  784. [1] apID
  785. [2] 0
  786. [3] 0
  787. [4] 0
  788. [5] Gruppenkennung des Dokuments
  789. [6] 0
  790. [7] 0
  791.  
  792.  
  793. Als Antwort erhält der Client folgende Message:
  794.  
  795.  
  796. OLGA_ACK
  797. (Manager -> Client)
  798. [0] $1239 (4665)
  799. [1] apID
  800. [2] 0
  801. [3] 0
  802. [4] 0
  803. [5] Gruppenkennung des Dokuments
  804. [6] 0
  805. [7] OLGA_CLOSEDOC
  806.  
  807.  
  808.  
  809. 4.3.3  OLGA_LINK
  810. ----------------
  811.  
  812. Mit der folgendes Message teilt ein Client dem Manager mit, daß eine
  813. Datei in eines seiner Dokumente eingebunden wurde - allerdings in der
  814. Form, daß nur eine Referenz (hier der Dateiname mit absolutem Pfad)
  815. gespeichert wird. Wenn diese Datei von einem OLGA-Server verändert
  816. wird (oder eine AV_PATH_UPDATE-Message von einem Programm empfangen
  817. wird, das kein Server ist), erhält der Client dann eine OLGA_UPDATED
  818. Message.
  819.  
  820.  
  821. OLGA_LINK
  822. (Client -> Manager)
  823. [0] $123d (4669)
  824. [1] apID
  825. [2] 0
  826. [3]
  827.  +  Pointer auf den Dateinamen, der überwacht werden soll
  828. [4] (incl. absolutem Pfad)
  829. [5] Gruppenkennung des Dokuments (s. OLGA_OPENDOC)
  830. [6] 0
  831. [7] 0
  832.  
  833.  
  834. Als Bestätigung verschickt der Manager folgende Message:
  835.  
  836.  
  837. OLGA_ACK
  838. (Manager -> Client)
  839. [0] $1239 (4665)
  840. [1] apID
  841. [2] 0
  842. [3]
  843.  +  exakt dieselben Wert von OLGA_LINK
  844. [4]
  845. [5] Gruppenkennung des Dokuments
  846. [6] 0=Fehler, sonst: Link eingerichtet
  847. [7] OLGA_LINK
  848.  
  849.  
  850.  
  851. 4.3.4  OLGA_UNLINK
  852. ------------------
  853.  
  854. Soll die Überwachung für eine Datei beendet werden, muß der Client dem
  855. Manager folgende Message schicken. Beim Schließen eines Dokuments
  856. sollte stattdessen allerdings OLGA_CLOSEDOC verwendet werden, beim
  857. Beenden der Client-Applikation werden die Links mit OLE_EXIT
  858. automatisch gelöscht.
  859.  
  860.  
  861. OLGA_UNLINK
  862. (Client -> Manager)
  863. [0] $123e (4670)
  864. [1] apID
  865. [2] 0
  866. [3] Pointer auf den Dateinamen (incl. absolutem Pfad), der nicht mehr
  867.  +  überwacht werden soll (muß exakt mit der Zeichenkette aus OLGA_LINK
  868. [4] übereinstimmen)
  869. [5] Gruppenkennung des Dokuments
  870. [6] 0
  871. [7] 0
  872.  
  873.  
  874. Als Bestätigung erhält der Client folgende Message:
  875.  
  876.  
  877. OLGA_ACK
  878. (Manager -> Client)
  879. [0] $1239 (4665)
  880. [1] apID
  881. [2] 0
  882. [3]
  883.  +  exakt dieselben Wert von OLGA_UNLINK
  884. [4]
  885. [5] Gruppenkennung des Dokuments
  886. [6] 0=Fehler, sonst: Link entfernt
  887. [7] OLGA_UNLINK
  888.  
  889.  
  890.  
  891. 4.3.5  OLGA_UPDATED
  892. -------------------
  893.  
  894. Und mit der nächsten Message werden dem Client Änderungen an einer
  895. Datei vom Manager mitgeteilt! Wenn der Client also eine solche Message
  896. empfängt, sollte das zugehörige Dokument neu angezeigt werden. Der
  897. Pointer ist solange gültig, wie der Link besteht.
  898.  
  899.  
  900. OLGA_UPDATED
  901. (Manager -> Client)
  902. [0] $123f (4671)
  903. [1] apID
  904. [2] 0
  905. [3]
  906.  +  Pointer auf den Dateinamen (incl. absolutem Pfad) der Datei,
  907. [4] die verändert wurde
  908. [5] 0 bzw. Index-Nummer, falls eine Info-Datei angefordert werden kann
  909. [6] apID des Updaters (Server); garantiert gesetzt, wenn [5] ungleich null;
  910.     an diese ID kann eine OLGA_GETINFO-Message geschickt werden
  911. [7] Gruppenkennung des Dokuments
  912.  
  913.  
  914. Wenn dem Client bei dieser Message das Vorhandensein einer Info-Datei
  915. (Aufbau s.u.) gemeldet wird und der Client diese anfordern möchte,
  916. sollte er so schnell wie möglich dem Server direkt (!) eine
  917. OLGA_GETINFO-Message schicken. Dieses Vorgehen ist bereits weiter oben
  918. ("...aus der Sicht des Servers") beschrieben.
  919.  
  920.  
  921. 4.3.6  OLGA_RENAMELINK
  922. ----------------------
  923.  
  924. Wenn ein Server eine Datei umbenannt oder verschoben hat, erhält der
  925. Client folgende Message. Sie dient nur dazu, daß der Client seine
  926. interne Referenz aktualisiert, d.h. das Dokument muß nicht neu
  927. gezeichnet werden! Der Pointer auf den neuen Namen ist solange gültig,
  928. wie der Link besteht.
  929.  
  930.  
  931. OLGA_RENAMELINK
  932. (Manager -> Client)
  933. [0] $1240 (4672)
  934. [1] apID
  935. [2] 0
  936. [3]
  937.  +  Pointer auf den alten Dateinamen incl. absolutem Pfad
  938. [4]
  939. [5]
  940.  +  Pointer auf den neuen Dateinamen incl. absolutem Pfad
  941. [6]
  942. [7] Gruppenkennung des Dokuments
  943.  
  944.  
  945.  
  946. 4.3.7  OLGA_LINKRENAMED
  947. -----------------------
  948.  
  949. Als Antwort auf OLGA_RENAMELINK muß der Client an den Manager folgende
  950. Message schicken, damit letzterer seine Referenz aktualisiert und
  951. unnötigen Speicherplatz freigibt (der Client muß dazu nur die
  952. Messagenummer austauschen). Unterbleibt diese Antwort, ist der
  953. entsprechende Link "tot", kann also nicht mehr überwacht werden (da ja
  954. im Manager dann noch der alte Name gespeichert ist).
  955.  
  956.  
  957. OLGA_LINKRENAMED
  958. (Client -> Manager)
  959. [0] $1241 (4673)
  960. [1] apID
  961. [2] 0
  962. [3]
  963.  +  Pointer auf den alten Dateinamen incl. absolutem Pfad
  964. [4]
  965. [5]
  966.  +  Pointer auf den neuen Dateinamen incl. absolutem Pfad
  967. [6]
  968. [7] Gruppenkennung des Dokuments
  969.  
  970.  
  971.  
  972. 4.3.8  OLGA_LINKBROKEN
  973. ----------------------
  974.  
  975. Wenn eine Datei dem Client plötzlich nicht mehr zur Verfügung steht
  976. (z.B. weil sie gelöscht wurde), wird dies vom Manager mit folgender
  977. Message mitgeteilt. Der Client kann daraufhin z.B. den Benutzer
  978. informieren oder per Fileselectbox eine andere Datei auswählen lassen.
  979.  
  980.  
  981. OLGA_LINKBROKEN
  982. (Manager -> Client)
  983. [0] $1245 (4677)
  984. [1] apID
  985. [2] 0
  986. [3]
  987.  +  Pointer auf den Dateinamen incl. absolutem Pfad
  988. [4]
  989. [5] Gruppenkennung des Dokuments
  990. [6] 0
  991. [7] 0
  992.  
  993.  
  994. Außerdem sollte der Client den jetzt ungültigen Link mit der normalen
  995. Unlink-Message auflösen:
  996.  
  997.  
  998. OLGA_UNLINK
  999. (Client -> Manager)
  1000. [0] $123e (4670)
  1001. [1] apID
  1002. [2] 0
  1003. [3] Pointer auf den Dateinamen (incl. absolutem Pfad), der nicht mehr
  1004.  +  überwacht werden kann (es können auch exakt die Werte aus
  1005. [4] OLGA_LINKBROKEN übergeben werden!)
  1006. [5] Gruppenkennung des Dokuments
  1007. [6] 0
  1008. [7] 0
  1009.  
  1010.  
  1011.  
  1012. 4.3.9  OLGA_START
  1013. -----------------
  1014.  
  1015. Für Clients bietet der Manager eine einfache Möglichkeit, passende
  1016. Server nachzustarten bzw. aufzurufen. Dazu wird (bei OLS_TYPE und
  1017. OLS_EXTENSION) die Datei OLGA.INF ausgewertet. Zunächst wird der darin
  1018. gefundene Server im Speicher gesucht und bei Erfolg mit VA_START (s.
  1019. Gemini-Doku) aufgerufen. Ansonsten wird das Programm unter MultiTOS
  1020. bzw. MagiC mit shel_write() nachgestartet.
  1021.  
  1022.  
  1023. OLGA_START
  1024. (Client -> Manager)
  1025. [0] $1246 (4678)
  1026. [1] apID
  1027. [2] 0
  1028. [3] eine der OLS-Konstanten (s.u.)
  1029. [4]
  1030.  +  Angaben, welches Programm / welcher Programmtyp gestartet werden soll
  1031. [5] (abhängig von [3], s.u.)
  1032. [6]
  1033.  +  Pointer auf Kommandozeile (i.A. nur die zu ladende Datei) oder NULL
  1034. [7]
  1035.  
  1036. OLS_TYPE      = $0001  [4]=0, in [5] steht ein XAcc-Programmtyp
  1037. OLS_EXTENSION = $0002  in [4]+[5] steht eine Extension (z.B. ".GEM")
  1038. OLS_NAME      = $0003  in [4]+[5] steht ein Pointer auf den absoluten
  1039.                        Dateinamen der zu startenden Applikation
  1040.  
  1041.  
  1042. Als Bestätigung erhält man folgende Message:
  1043.  
  1044.  
  1045. OLGA_ACK
  1046. (Manager -> Client)
  1047. [0] $1239 (4665)
  1048. [1] apID
  1049. [2] 0
  1050. [3] OLS-Konstante von OLGA_START
  1051. [4]
  1052.  +  exakt dieselben Wert von OLGA_START
  1053. [5]
  1054. [6] 0=Fehler, sonst: Server gestartet
  1055. [7] OLGA_START
  1056.  
  1057.  
  1058. Um die Kommandozeile leichter freigeben zu können, erhält man außerdem
  1059. noch eine zweite Message (wenn für die Kommandozeile nicht NULL
  1060. übergeben wurde).
  1061.  
  1062.  
  1063. OLGA_ACK
  1064. (Manager -> Client)
  1065. [0] $1239 (4665)
  1066. [1] apID
  1067. [2] 0
  1068. [3] 0 (!)
  1069. [4]
  1070.  +  exakt dieselben Wert von OLGA_START [6]+[7]
  1071. [5]
  1072. [6] 0=Fehler, sonst: Server gestartet
  1073. [7] OLGA_START
  1074.  
  1075.  
  1076.  
  1077. 4.3.10  OLGA_SERVERTERMINATED
  1078. -----------------------------
  1079.  
  1080. Wenn ein Server terminiert, erhalten alle Clients, die diesen Server
  1081. per OLGA_START aufgerufen haben, folgende Message:
  1082.  
  1083.  
  1084. OLGA_SERVERTERMINATED
  1085. (Manager -> Client)
  1086. [0] $1254 (4692)
  1087. [1] manID
  1088. [2] 0
  1089. [3] AES-ID des terminierten Servers
  1090. [4]
  1091.  +  Extension oder (0,XAcc-Typ) oder NULL
  1092. [5]
  1093. [6] reserviert
  1094. [7] 0
  1095.  
  1096.  
  1097. Je nachdem, in welchem Modus der Server nachgestartet wurde, enthalten
  1098. die Felder [4..5] unterschiedliche Werte. Beim Start mit OLS_EXTENSION
  1099. steht dort eben diese Extension, beim Start mit OLS_TYPE ist [4]=0 und
  1100. [5] enthält den XAcc-Programmtyp. Beim Start mit OLS_NAME sind beide
  1101. Felder ausgenullt.
  1102.  
  1103.  
  1104.  
  1105. 5  InplaceDrawing
  1106. *****************
  1107.  
  1108. Damit InplaceDrawing (ID4-OLGA, ID4) funktionieren kann, muß der
  1109. OLGA-Manager korrekt installiert (siehe "Installation des OLGA-
  1110. Managers") und OLGA.INF entsprechend angepaßt sein (Abschnitte
  1111. [Extensions] und [Objects]). ID4-Server und -Clients sind ganz normale
  1112. OLGA-Server und -Clients, die sich zusätzlich an das im folgenden
  1113. vorgestellte Protokoll halten.
  1114.  
  1115.  
  1116. 5.1  ID4-Client
  1117. ===============
  1118.  
  1119. ID4-Clients betten Objekte in ihre Dokumente ein (man nennt diese
  1120. Clients deshalb auch "Containerapplikationen"). Ein Client ermittelt
  1121. mit OLGA_GETOBJECTS alle in OLGA.INF eingetragenen ID4-Objekte, um dem
  1122. Anwender z.B. den folgenden Dialog anbieten zu können:
  1123.  
  1124. Pro Objekt, das eingebettet werden soll, muß ein ID4-Client folgende
  1125. Struktur im globalen Speicher anlegen (siehe auch OLGA.H und
  1126. OLGA.INC):
  1127.  
  1128.  
  1129.         typedef struct ObjectInfo
  1130.         {
  1131.                 char  *Filename;
  1132.                 AESPB *ClientGEMPB;
  1133.                 long   ClientData,
  1134.                        ServerData;
  1135.                 int    CBLock,
  1136.                        CBCount;
  1137.                 void   cdecl (*CBDraw)    (ObjectInfo *objectinfo,
  1138.                                            int outScreen,
  1139.                                            int outHandle,
  1140.                                            int outDevID,
  1141.                                            GRECT *Size,
  1142.                                            GRECT *Clip);
  1143.                 void   cdecl (*CBUnembed) (ObjectInfo *objectinfo);
  1144.         } OLGAObjectInfo;
  1145.  
  1146.  
  1147. Danach werden die nötigen ID4-Server mit OLGA_ACTIVATE nachgestartet
  1148. und alle Objekte einzeln mit OLGA_EMBED eingebunden.
  1149.  
  1150. Zum Zeichnen eines Objekts geht ein Client folgendermaßen vor:
  1151. Zunächst wird OLGAObjectInfo.CBLock des zugehörigen Objekts um eins
  1152. erhöht. Direkt danach testet der Client, ob in CBLock ein Wert größer
  1153. Null eingetragen ist. Ist dies nicht der Fall, darf der Client die
  1154. Callback-Routinen nicht aufrufen! Ansonsten testet der Client, ob
  1155. CBDraw ungleich NULL ist - wenn ja, ruft er denn Callback auf. Zum
  1156. Schluß wird CBLock wieder um eins erniedrigt.
  1157.  
  1158. Clients sollten beim Empfang von OLGA_INPLACEUPDATE das in dieser
  1159. Message angegebene Objekt neu zeichnen lassen.
  1160.  
  1161. Beim Löschen eines Objekts (oder Schließen eines Dokuments bzw.
  1162. Terminieren des Clients) muß für jedes Objekt CBUnembed() aufgerufen
  1163. werden, sofern der Callback ungleich NULL ist. Die Absicherung mit
  1164. CBLock erfolgt wie oben beschrieben. Der Server weiß dann, das für
  1165. dieses Objekt keine ID4-Verknüpfung mehr besteht (bzw. eine weniger).
  1166.  
  1167. Umgekehrt schickt ein Server dem Client OLGA_UNEMBED, wenn der Server
  1168. ein eingebettetes Objekt nicht mehr zur Verfügung stellen (d.h.
  1169. zeichnen) kann. Der Client kann dann das Objekt ungültig machen (z.B.
  1170. als weißes, rot durchgestrichenes Rechteck darstellen). In ähnlicher
  1171. Weise sollte ein Client auf OLGA_SERVERTERMINATED reagieren.
  1172.  
  1173.  
  1174. 5.1.1  OLGA_GETOBJECTS
  1175. ----------------------
  1176.  
  1177. Mit dieser Message kann ein ID4-Client den Manager abfragen, welche
  1178. Dateitypen per ID4-OLGA eingebettet werden können.
  1179.  
  1180.  
  1181. OLGA_GETOBJECTS
  1182. (Client -> Manager)
  1183. msg[0] $1242 (4674)
  1184. msg[1] apID
  1185. msg[2] 0
  1186. msg[3] erstes (0) oder weiteres (1) Objekt
  1187. msg[4] 0
  1188. msg[5] 0
  1189. msg[6] 0
  1190. msg[7] 0
  1191.  
  1192.  
  1193. Als Antwort erhält der Client die Message OLGA_OBJECTS, die ihm neben
  1194. der Extension auch die Klartextbeschreibung des Dateityps für die
  1195. Benutzerauswahl (siehe "ID4-Client") liefert.
  1196.  
  1197.  
  1198. OLGA_OBJECTS
  1199. (Manager -> Client)
  1200. msg[0] $1243 (4675)
  1201. msg[1] manID
  1202. msg[2] 0
  1203. msg[3] Anzahl der noch abrufbaren Objekte (0=dies ist das letzte Objekt)
  1204. msg[4]
  1205.     +  Extension des Dateiformats, z.B. ".GEM"
  1206. msg[5]
  1207. msg[6]
  1208.     +  Pointer auf Klartext-Objektbeschreibung
  1209. msg[7] (gültig bis zum Terminieren des Managers)
  1210.  
  1211.  
  1212. Die Message OLGA_GETOBJECTS muß nun so lange an den Manager geschickt
  1213. werden, bis OLGA_OBJECTS in msg[3] eine Null zurückgibt.
  1214.  
  1215.  
  1216. 5.1.2  OLGA_ACTIVATE
  1217. --------------------
  1218.  
  1219. Irgendwann vor dem Zeichnen, am besten auch vor dem Einbetten des
  1220. ersten Objekts, außerhalb (!) einer wind_update()-Blockierung, schickt
  1221. der ID4-Client dem Manager folgende Message. Falls der Client vor dem
  1222. nächsten wind_update() nicht mehr in seine Eventschleife geht, muß er
  1223. danach einen evnt_timer() (mind. 1000ms) machen.
  1224.  
  1225.  
  1226. OLGA_ACTIVATE
  1227. (Client->Manager)
  1228. msg[0] $124a
  1229. msg[1] apID
  1230. msg[2] 0
  1231. msg[3]
  1232.     +  Pointer auf 4-Zeichen Extensions (z.B. ".GEM.CWG"),
  1233. msg[4]  evtl. kürzen oder mit Nullbytes (!) auffüllen
  1234. msg[5] Anzahl der Extensions (>=1)
  1235. msg[6] 0
  1236. msg[7] 0
  1237.  
  1238.  
  1239. In dieser Message sollten alle verschiedenen Extensions aller
  1240. eingebetteten Objekte angegeben werden, damit der Manager die
  1241. passenden Server starten kann.
  1242.  
  1243. Der Manager verschickt daraufhin als Bestätigung folgende Message:
  1244.  
  1245.  
  1246. OLGA_ACK
  1247. (Manager -> Client)
  1248. [0] $1239 (4665)
  1249. [1] manID
  1250. [2] 0
  1251. [3] derselbe Wert wie in empfangener OLGA_ACTIVATE-Message
  1252. [4] derselbe Wert wie in empfangener OLGA_ACTIVATE-Message
  1253. [5] derselbe Wert wie in empfangener OLGA_ACTIVATE-Message
  1254. [6] 0
  1255. [7] OLGA_ACTIVATE
  1256.  
  1257.  
  1258.  
  1259. 5.1.3  OLGA_EMBED
  1260. -----------------
  1261.  
  1262. Zum Einbetten eines Objekts legt ein Client eine OLGAObjectInfo-
  1263. Struktur im globalen Speicher an, setzt die Felder Filename (absoluter
  1264. Dateiname, nullterminiert), ClientGEMPB (ein Pointer auf die Struktur,
  1265. die Pointer zu den GEM-Arrays global[] etc. enthält), ClientData
  1266. (beliebige Client-Daten), CBLock (konstant auf -16000) sowie CBCount
  1267. (z.Z. immer auf 2) und nullt alle anderen Felder aus. Danach schickt
  1268. der Client dem Manager folgende Message:
  1269.  
  1270.  
  1271. OLGA_EMBED
  1272. (Client->Manager)
  1273. msg[0] $124b
  1274. msg[1] clientID
  1275. msg[2] 0
  1276. msg[3] Client-Flag
  1277. msg[4]
  1278.     +  Pointer auf OLGAObjectInfo des Objekts
  1279. msg[5]
  1280. msg[6]
  1281.     +  Extension
  1282. msg[7]
  1283.  
  1284.  
  1285. Das Client-Flag kann vom Client beliebig gesetzt werden und wird auch
  1286. später wieder an den Client zurückgegeben. Die Extension beschreibt
  1287. den Dateityp des Filenames aus OLGAObjectInfo (z.B. ".GEM"). Anhand
  1288. dieser Extension wird der ID4-Server angesprochen, der bereits laufen
  1289. muß (siehe OLGA_ACTIVATE).
  1290.  
  1291. Das eigentliche Einbetten darf der Client erst vornehmen, wenn er
  1292. folgende Message (direkt vom Server) erhält:
  1293.  
  1294.  
  1295. OLGA_EMBEDDED
  1296. (Server->Client)
  1297. msg[0] $124c
  1298. msg[1] serverID
  1299. msg[2] 0
  1300. msg[3] Client-Flag
  1301. msg[4]
  1302.     +  Pointer auf OLGAObjectInfo
  1303. msg[5]
  1304. msg[6] Breite des Objekts in 1/100mm (vorzeichenlos), 0 bei Fehler
  1305. msg[7] Höhe des Objekts in 1/100mm (vorzeichenlos), 0 bei Fehler
  1306.  
  1307.  
  1308. Client-Flag und der OLGAObjectInfo-Pointer sind unverändert zu
  1309. OLGA_EMBED. ServerData kann vom Server verändert worden sein (wie der
  1310. Name schon sagt, gehört dieses Feld dem Server und darf vom Client
  1311. nicht verändert werden), und in CBDraw sollte der Server einen Pointer
  1312. auf seine Zeichenroutine eingetragen haben.
  1313.  
  1314. Mit msg[6]/msg[7] teilt der Server dem Client die optimale Objektgröße
  1315. mit. Der Client muß sich nicht an diese Größe halten, kennt durch das
  1316. Breite/Höhe-Verhältnis aber auf jeden Fall die Proportionen des
  1317. Objekts.
  1318.  
  1319. Wichtig: Wenn msg[6]/msg[7] ausgenullt sind, ist ein Fehler
  1320. aufgetreten (OLGA_EMBEDDED kann in diesem Fall auch schon vom Manager
  1321. verschickt worden sein). Der Client darf das Objekt dann nicht
  1322. einbetten!
  1323.  
  1324.  
  1325. 5.2  ID4-Server
  1326. ===============
  1327.  
  1328. Wichtig: Wenn ID4 mit MemoryProtection funktionieren soll, muß das
  1329. GLOBAL-Flag im Programmheader des ID4-Servers gesetzt sein!
  1330.  
  1331. Wenn ein Client ein Objekt einbetten möchte, erhält der Server vom
  1332. Manager eine OLGA_EMBED-Message, die er mit OLGA_EMBEDDED beantworten
  1333. muß.
  1334.  
  1335. Zum Zeichnen wird vom Client der CBDraw()-Callback aufgerufen. Während
  1336. der Abarbeitung des Callsbacks dürfen vom Server i.d.R. keine AES-
  1337. Aufrufe gemacht werden (das schließt wind_update() mit ein!). Außerdem
  1338. darf der Server die Farbpalette nicht verstellen. Wenn im Server
  1339. Veränderungen an einem Objekt vorgenommen werden, kann dem Client zum
  1340. sofortigen Update die Message OLGA_INPLACEUPDATE geschickt werden.
  1341.  
  1342. Damit es beim Terminieren des Servers oder Schließen eines Dokuments
  1343. keine undefinierten Zeiger gibt, muß der Server folgendermaßen
  1344. vorgehen:
  1345.  
  1346. Für jedes Objekt testet der Server, ob OLGAObjectInfo.CBLock<=0 ist.
  1347. Ist dies der Fall, setzt der Server erst CBLock auf -16000, dann
  1348. CBDraw auf NULL.
  1349.  
  1350. Das ganze muß in einer evnt_timer()-Schleife solange wiederholt
  1351. werden, bis keine Objekte mehr belegt sind. Erst dann darf der Server
  1352. terminieren oder das Dokumentfenster schließen.
  1353.  
  1354. Hat der Server alle entsprechenden CBDraw()-Pointer auf NULL gesetzt
  1355. muß er dem Client OLGA_UNEMBED schicken. Der Client kann beim Empfang
  1356. dieser Message das so "ungültig" gewordene Objekt als z.B. weißes, rot
  1357. durchgestrichenes Rechteck neu zeichnen.
  1358.  
  1359. Damit der Server feststellen kann, ob ein eingebettetes Objekt noch
  1360. von einem Client benutzt wird, wird von den Clients zum Auflösen der
  1361. Verbindung der CBUnembed()-Callback aufgerufen. In ähnlicher Weise
  1362. sollte ein ID4-Server auf den Empfang von OLGA_CLIENTTERMINATED
  1363. reagieren.
  1364.  
  1365. Damit es beim evtl. Absturz eines Servers keine Probleme gibt, sollte
  1366. der Server etv_critic() überschreiben und beim Durchlaufen durch diese
  1367. Routine CBDraw in allen Objekten auf NULL und CBLock auf -16000
  1368. setzen.
  1369.  
  1370.  
  1371. 5.2.1  OLGA_EMBEDDED
  1372. --------------------
  1373.  
  1374. Wenn ein Client ein Objekt einbetten möchte, erhält der Server vom
  1375. Manager folgende Message:
  1376.  
  1377.  
  1378. OLGA_EMBED
  1379. (Manager->Server)
  1380. msg[0] $124b
  1381. msg[1] manID
  1382. msg[2] 0
  1383. msg[3] Client-Flag
  1384. msg[4]
  1385.     +  Pointer auf OLGAObjectInfo
  1386. msg[5]
  1387. msg[6] 0
  1388. msg[7] clientID
  1389.  
  1390.  
  1391. msg[3..5] dürfen vom Server nicht verändert werden und müssen bei
  1392. OLGA_EMBEDDED zurückgegeben werden. Das Feld ServerData in
  1393. OLGAObjectInfo kann vom Server beliebig verwendet werden.
  1394.  
  1395. Der Server kann nun die in OLGAObjectInfo angegebene Datei laden,
  1396. setzt CBLock auf Null und trägt in CBDraw den Pointer auf seine
  1397. Zeichenroutine ein. In CBUnembed kann der Server eine Routine
  1398. eintragen, die vom Client beim Auflösen der ID4-Verknüpfung aufgerufen
  1399. wird.
  1400.  
  1401. Dann muß der Server dem Client direkt (!) folgende Antwort schicken
  1402. (die Client-ID bekommt der Server in msg[7] mitgeteilt):
  1403.  
  1404.  
  1405. OLGA_EMBEDDED
  1406. (Server->Client)
  1407. msg[0] $124c
  1408. msg[1] serverID
  1409. msg[2] 0
  1410. msg[3] Client-Flag
  1411. msg[4]
  1412.     +  Pointer auf OLGAObjectInfo
  1413. msg[5]
  1414. msg[6] Breite des Objekts in 1/100mm (vorzeichenlos), 0 bei Fehler
  1415. msg[7] Höhe des Objekts in 1/100mm (vorzeichenlos), 0 bei Fehler
  1416.  
  1417.  
  1418. Wenn der Server in msg[6..7] einen Fehler signalisiert, wird der
  1419. Client das Objekt nicht einbetten.
  1420.  
  1421. Wichtig: Falls der Server vom Manager nachgestartet wird, können
  1422. OLGA_EMBED-Messages eintreffen, noch bevor der Server seine OLGA-
  1423. Anmeldung beendet hat! Es ist dann Sache des Servers, ob er die
  1424. OLGA_EMBEDDED-Antworten sofort bearbeitet oder erst nach Abschluß
  1425. seiner Initialisierung.
  1426.  
  1427.  
  1428. 5.2.2  OLGA_UNEMBED
  1429. -------------------
  1430.  
  1431. Damit es beim Terminieren des Servers oder Schließen eines Dokuments
  1432. keine undefinierten Zeiger gibt, muß der Server folgendermaßen
  1433. vorgehen:
  1434.  
  1435. Für jedes Objekt testet der Server, ob CBLock<=0 ist. Ist dies der
  1436. Fall, setzt der Server erst CBLock auf -16000, dann CBDraw auf NULL.
  1437.  
  1438. Das ganze muß in einer evnt_timer()-Schleife solange wiederholt
  1439. werden, bis keine Objekte mehr belegt sind. Erst dann darf der Server
  1440. terminieren oder das Dokumentfenster schließen.
  1441.  
  1442. Hat der Server alle entsprechenden CBDraw's auf NULL gesetzt etc. muß
  1443. er dem Client direkt (!) für jedes Objekt folgende Message schicken
  1444. (bzw. stattdessen eine einzige Message mit msg[3..4]=NULL beim
  1445. Terminieren):
  1446.  
  1447.  
  1448. OLGA_UNEMBED
  1449. (Server->Client)
  1450. msg[0] $124d
  1451. msg[1] serverID
  1452. msg[2] 0
  1453. msg[3] 0
  1454. msg[4]
  1455.     +  Pointer auf OLGAObjectInfo oder NULL (s.o.)
  1456. msg[5]
  1457. msg[6] 0
  1458. msg[7] 0
  1459.  
  1460.  
  1461. Der Client kann beim Empfang dieser Message das so "ungültig"
  1462. gewordene Objekt als z.B. weißes, rot durchgestrichenes Rechteck neu
  1463. zeichnen.
  1464.  
  1465.  
  1466. 5.2.3  OLGA_INPLACEUPDATE
  1467. -------------------------
  1468.  
  1469. Wenn an einem Dokument Änderungen vorgenommen werden, kann der Server
  1470. dem Client folgende Message schicken, damit letzterer eingebettete
  1471. Objekt sofort neu zeichnen läßt (ohne daß vorher ein Speichern nötig
  1472. ist). Der Server darf diese Message erst dann verschicken, nachdem er
  1473. OLGA_EMBEDDED an den Client geschickt hat!
  1474.  
  1475.  
  1476. OLGA_INPLACEUPDATE
  1477. (Server->Client)
  1478. msg[0] $1256
  1479. msg[1] serverID
  1480. msg[2] 0
  1481. msg[3] 0
  1482. msg[4]
  1483.     +  Pointer auf OLGAObjectInfo
  1484. msg[5]
  1485. msg[6] 0
  1486. msg[7] 0
  1487.  
  1488.  
  1489.  
  1490. 5.2.4  CBDraw
  1491. -------------
  1492.  
  1493. C-Notation:
  1494.  
  1495.         void cdecl (*CBDraw) (ObjectInfo *objectinfo,
  1496.                               int outScreen,
  1497.                               int outHandle,
  1498.                               int outDevID,
  1499.                               GRECT *Size,
  1500.                               GRECT *Clip);
  1501.  
  1502. PurePascal-Notation:
  1503. (d1..d5 sind Dummy-Werte, hier sollte nil bzw. 0 übergeben werden.)
  1504.  
  1505.         CBDraw: procedure(d1,d2: pointer; d3,d4,d5: longint;
  1506.                           objectinfo: POLGAObjectInfo;
  1507.                           outScreen,
  1508.                           outHandle,
  1509.                           outDevID: integer;
  1510.                           Size,
  1511.                           Clip: GRECTPtr);
  1512.  
  1513.  
  1514. Wenn CBDraw() vom Client aufgerufen wird, sollte der Server
  1515. überprüfen, ob er die Datei OLGAObjectInfo.Filename (der
  1516. OLGAObjectInfo-Pointer wird bei CBDraw() übergeben) schon geladen hat
  1517. - wenn nicht, sollte dies nun erfolgen. Da das Laden aber eigentlich
  1518. durch OLGA_EMBED sichergestellt sein sollte, kann in einem solchen
  1519. Fall alternativ auch ein Fehler angezeigt werden, beispielsweise durch
  1520. einfaches Durchstreichen des Objektbereichs mit zwei roten Linien
  1521. (evtl. kann der eigentliche Fehler auch noch im Klartext in den
  1522. Objektbereich ausgegeben werden).
  1523.  
  1524. Dann kann der Server die Grafik anhand der übergebenen Werte (s.u.)
  1525. zeichnen. Der Server darf innerhalb dieses Zeichnens keinerlei
  1526. wind_update()-Aufrufe machen! Die Parameter von CBDraw() haben
  1527. folgende Bedeutung:
  1528.  
  1529.    ∙ outScreen gibt an, ob die Ausgabe auf den Bildschirm erfolgt
  1530.      (<>0) oder nicht (=0). Auch eine Preview ist eine
  1531.      Bildschirmausgabe!
  1532.  
  1533.    ∙ outHandle ist das Handle der geöffneten Workstation (Bildschirm,
  1534.      Drucker etc.), auf die der Server direkt ausgeben kann. Wenn
  1535.      outScreen<>0 ist, kann der Server alternativ auch auf seine
  1536.      eigene Screen-Workstation ausgeben.
  1537.  
  1538.    ∙ outDevID gibt die Gerätenummer (aus ASSIGN.SYS) des Treibers an,
  1539.      auf den ausgegeben wird. Wenn es sich um eine reine
  1540.      Bildschirmausgabe handelt, steht in diesem Feld eine Null. Bei
  1541.      einer Preview wird zwar auf den Bildschirm ausgegeben, outDevID
  1542.      gibt dann z.B. aber den Treiber an, auf den später beim
  1543.      eigentlichen Druck ausgegeben wird. Der Server kann in diesem
  1544.      Fall versuchen, den Treiber zu öffnen, um die Bildschirmausgabe
  1545.      besser an die spätere Druckausgabe anzupassen.
  1546.  
  1547.    ∙ Size ist das Rechteck, in das die Grafik exakt eingepaßt werden
  1548.      muß, auch wenn es dabei zu Verzerrungen kommt. Clip ist das (vor
  1549.      dem Aufruf gesetzte) Clipping-Rechteck.
  1550.  
  1551. Wichtig: Ein Server darf während CBDraw() keine AES-Aufrufe machen!
  1552. (Es sei denn, das AESPB-Zeigerfeld wurde mittels ClientGEMPB angepaßt;
  1553. wind_update() bleibt für ID4-Server aber trotzdem tabu.) Außerdem darf
  1554. die Farbpalette im Callback nicht verstellt werden.
  1555.  
  1556.  
  1557. 5.2.5  CBUnembed
  1558. ----------------
  1559.  
  1560. C-Notation:
  1561.  
  1562.         void cdecl (*CBUnembed) (ObjectInfo *objectinfo);
  1563.  
  1564. PurePascal-Notation:
  1565. (d1..d5 sind Dummy-Werte, hier sollte nil bzw. 0 übergeben werden.)
  1566.  
  1567.         CBUnembed: procedure(d1,d2: pointer; d3,d4,d5: longint;
  1568.                              objectinfo: POLGAObjectInfo);
  1569.  
  1570.  
  1571. Beim Löschen eines Objekts (oder Schließen eines Dokuments bzw.
  1572. Terminieren) ruft ein Client für jedes Objekt CBUnembed() auf. Der
  1573. ID4-Server kann auf diese Weise feststellen, daß für das angegebene
  1574. Objekt keine ID4-Verknüpfung mehr besteht (bzw. eine weniger).
  1575.  
  1576.  
  1577.  
  1578. 6  Notification
  1579. ***************
  1580.  
  1581. Es kann Applikationen geben, denen das bisher vorgestellte
  1582. ObjectLinking nicht ausreicht, weil damit nur bekannte (oder vom
  1583. Anwender ausgewählte) Dateien überwacht werden können. Mit der
  1584. Notification-Erweiterung kann sich eine Applikation nun vom Manager
  1585. über alle Updates bzw. solche eines bestimmten Dateityps informieren
  1586. lassen.
  1587.  
  1588. Wie immer müssen bei den folgenden Messages die Extensions immer groß
  1589. geschrieben werden. Sie sind (mit Punkt) exakt vier Zeichen lang, zur
  1590. Not muß man die Extension kürzen bzw. mit Nullbytes (!) auffüllen.
  1591.  
  1592.  
  1593. 6.1  OLGA_REQUESTNOTIFICATION
  1594. =============================
  1595.  
  1596. Wenn eine Applikation vom Manager bei Änderungen aller Dateien eines
  1597. bestimmten Typs benachrichtigt werden möchte, schickt sie ihm folgende
  1598. Message. Werden vier Nullbytes übergeben, wird die Applikation bei
  1599. jedem Update jeder Datei benachrichtig.
  1600.  
  1601.  
  1602. OLGA_REQUESTNOTIFICATION
  1603. (App -> Manager)
  1604. msg[0] $1250 (4688)
  1605. msg[1] apID
  1606. msg[2] 0
  1607. msg[3]
  1608.     +  Extension (z.B. ".TIF") oder NULL (="*.*")
  1609. msg[4]
  1610. msg[5] 0
  1611. msg[6] 0
  1612. msg[7] 0
  1613.  
  1614.  
  1615.  
  1616. 6.2  OLGA_RELEASENOTIFICATION
  1617. =============================
  1618.  
  1619. Eine Applikation kann die Benachrichtigung bei bestimmten (vorher per
  1620. OLGA_REQUESTNOTIFICATION angeforderten) Dateitypen (bzw. bei allen,
  1621. falls vier Nullbytes übergeben werden) mit folgender Message wieder
  1622. ausschalten.
  1623.  
  1624.  
  1625. OLGA_RELEASENOTIFICATION
  1626. (App -> Manager)
  1627. msg[0] $1251 (4689)
  1628. msg[1] apID
  1629. msg[2] 0
  1630. msg[3]
  1631.     +  Extension (z.B. ".TIF") oder NULL (="*.*")
  1632. msg[4]
  1633. msg[5] 0
  1634. msg[6] 0
  1635. msg[7] 0
  1636.  
  1637.  
  1638.  
  1639. 6.3  OLGA_NOTIFY
  1640. ================
  1641.  
  1642.  
  1643. OLGA_NOTIFY
  1644. (Manager -> App)
  1645. msg[0] $1252 (4690)
  1646. msg[1] manID
  1647. msg[2] 0
  1648. msg[3]
  1649.     +  Pointer auf Dateinamen mit absolutem Pfad
  1650. msg[4]
  1651. msg[5] 0
  1652. msg[6] 0
  1653. msg[7] 0
  1654.  
  1655.  
  1656. Mit dieser Message teilt der Manager der Applikation mit, daß eine
  1657. Datei verändert wurde. Falls die Applikation einen Link auf diese
  1658. Datei gesetzt hat, erhält sie vorher auch noch eine OLGA_UPDATED-
  1659. Message!
  1660.  
  1661. Nach dem Empfang dieser Message muß die Applikation dem Manager
  1662. folgende Nachricht schicken:
  1663.  
  1664.  
  1665. OLGA_NOTIFIED
  1666. (App -> Manager)
  1667. msg[0] $1253 (4691)
  1668. msg[1] apID
  1669. msg[2] 0
  1670. msg[3] gleicher Wert wie in empfangener OLGA_NOTIFY-Message
  1671. msg[4] gleicher Wert wie in empfangener OLGA_NOTIFY-Message
  1672. msg[5] gleicher Wert wie in empfangener OLGA_NOTIFY-Message
  1673. msg[6] gleicher Wert wie in empfangener OLGA_NOTIFY-Message
  1674. msg[7] gleicher Wert wie in empfangener OLGA_NOTIFY-Message
  1675.  
  1676.  
  1677.  
  1678.  
  1679. 7  Idle-Test
  1680. ************
  1681.  
  1682. Mit dem Idle-Test können Server bzw. Clients und der Manager
  1683. gegenseitig feststellen, ob alle vorhergehenden OLGA-Messages
  1684. abgearbeitet wurden. Dazu wird folgende Message verschickt:
  1685.  
  1686.  
  1687. OLGA_IDLE
  1688. (Manager -> App, App -> Manager)
  1689. msg[0] $1249 (4681)
  1690. msg[1] manID
  1691. msg[2] 0
  1692. msg[3] 1
  1693. msg[4] reserviert
  1694. msg[5] reserviert
  1695. msg[6] reserviert
  1696. msg[7] reserviert
  1697.  
  1698.  
  1699. Als Antwort bekommt man (bzw. muß vom Client/Server an den Manager
  1700. geschickt werden) folgende Message:
  1701.  
  1702.  
  1703. OLGA_IDLE
  1704. (App -> Manager, Manager -> App)
  1705. msg[0] $1249 (4681)
  1706. msg[1] apID
  1707. msg[2] 0
  1708. msg[3] 0
  1709. msg[4] gleicher Wert wie in empfangener OLGA_IDLE-Message
  1710. msg[5] gleicher Wert wie in empfangener OLGA_IDLE-Message
  1711. msg[6] gleicher Wert wie in empfangener OLGA_IDLE-Message
  1712. msg[7] gleicher Wert wie in empfangener OLGA_IDLE-Message
  1713.  
  1714.  
  1715. Wenn eine Applikation den Idle-Test unterstützt, muß sie bei OLE_INIT
  1716. das passende Bit (OL_IDLE) setzen. Umgekehrt zeigt der OLGA-Manager
  1717. diese Fähigkeit bei OLGA_INIT und OLE_NEW an.
  1718.  
  1719.  
  1720.  
  1721. 8  Konfigurationsabfrage
  1722. ************************
  1723.  
  1724. Wenn eine Applikation globale Werte des OLGA-Managers abfragen möchte,
  1725. schickt sie ihm folgende Message:
  1726.  
  1727.  
  1728. OLGA_GETSETTINGS
  1729. (App -> Manager)
  1730. msg[0] $124e (4686)
  1731. msg[1] apID
  1732. msg[2] 0
  1733. msg[3] 0
  1734. msg[4] 0
  1735. msg[5] 0
  1736. msg[6] 0
  1737. msg[7] 0
  1738.  
  1739.  
  1740. Als Antwort bekommt man folgende Message. Die Felder msg[4..7] darf
  1741. man nur auswerten, wenn in msg[3] eine 1 eingetragen ist!
  1742.  
  1743.  
  1744. OLGA_SETTINGS
  1745. (Manager -> App)
  1746. msg[0] $124f (4687)
  1747. msg[1] manID
  1748. msg[2] 0
  1749. msg[3] 1=OK, 0=Fehler
  1750. msg[4] reserviert (z.Z. 0)
  1751. msg[5] reserviert (z.Z. 0)
  1752. msg[6] reserviert (z.Z. 0)
  1753. msg[7] reserviert (z.Z. 0)
  1754.  
  1755.  
  1756. Derzeit werden noch keine Manager-internen Daten zurückgeliefert!
  1757.  
  1758.  
  1759.  
  1760. 9  Das OLGA-Info-Dateiformat
  1761. ****************************
  1762.  
  1763. Info-Dateien erlauben den Austausch von spezielleren Informationen
  1764. zwischen Client und Server. Solche Dateien bestehen aus zwei Arten von
  1765. Datenstrukturen:
  1766.  
  1767.  
  1768.   OLGAInfHeader = record
  1769.     magic  : longint;  { 'OLGA' }
  1770.     version,           { z.Z. $0100 }
  1771.     skip   : word      { Anzahl der folgenden Headerbytes, die
  1772.                          überlesen werden müssen; z.Z. 0       }
  1773.   end;
  1774.  
  1775.   OLGABlockHeader = record
  1776.     id,              { Block-ID }
  1777.     length: longint  { Anzahl der folgenden Datenbytes }
  1778.   end;
  1779.  
  1780.  
  1781. Die Dateien sind folgendermaßen aufgebaut:
  1782.  
  1783.  
  1784.   InfHeader
  1785.   BlockHeader 1
  1786.   Daten 1
  1787.   BlockHeader 2
  1788.   Daten 2
  1789.   ...
  1790.   BlockHeader n-1
  1791.   Daten n-1
  1792.   BlockHeader n (id=0)
  1793.  
  1794.  
  1795. Das Dateiende (und damit Block n) wird durch die ID 0 gekennzeichnet.
  1796. Folgende Block-IDs sind bereits definiert (es ist damit allerdings
  1797. nicht festgelegt, welche Blöcke überhaupt bzw. in welcher Reihenfolge
  1798. gespeichert werden):
  1799.  
  1800.  $00000000 Dateiende (length sollte n.M. auch 0 sein)
  1801.  
  1802.  'REM ' Kommentar; die einzelnen Zeilen sind 0-terminiert, das Ende
  1803.      wird über die Länge erkannt (damit man auch Leerzeilen
  1804.      verschicken kann)
  1805.  
  1806.  'AUTH' Autor; Codierung siehe 'REM ', allerdings sollte man sich auf
  1807.      eine (0-terminierte) Zeile beschränken
  1808.  
  1809.  'KEYW' Stichworte; Codierung s. 'REM '; innerhalb der Zeilen liegen
  1810.      die Stichworte durch Komma getrennt vor
  1811.  
  1812.  'DATE' Datum der letzten Änderung als DOSTIME-Struktur
  1813.  
  1814.  'ICON' Ein mit der Datei bzw. derem Inhalt verknüpftes Icon vom Typ
  1815.      G_ICON (nicht G_CICON!). Die Länge des Blocks berechnet sich aus
  1816.      sizeof(ICONBLK) + 2*((ib_wicon+7) >> 3)*ib_hicon + (Länge des
  1817.      Icontextes ohne Nullbyte) + 1. Der Block ist folgendermaßen
  1818.      aufgebaut:
  1819.  
  1820.        1. ein kompletter ICONBLK; die Felder ib_pmask, ib_pdata und
  1821.           ib_ptext sollten vom Server auf NULL gesetzt werden und
  1822.           müssen vom Client ignoriert werden
  1823.  
  1824.        2. Maskendaten
  1825.  
  1826.        3. Bilddaten
  1827.  
  1828.        4. ein Byte, das die Länge des Icontextes angibt (kann auch
  1829.           Null sein)
  1830.  
  1831.        5. der Icontext (falls Längenbyte>0)
  1832.  
  1833. Unbekannte Blöcke müssen ignoriert (d.h. überlesen) werden. D.h.
  1834. natürlich auch, daß neue Block-IDs ohne Probleme angelegt werden
  1835. können - damit es nicht zu Kollisionen kommt, wäre es nett, wenn ich
  1836. (Adresse s. "Kontakt") verständigt würde, dann kann ich die Block-ID
  1837. in obige Liste aufnehmen.
  1838.  
  1839.  
  1840.  
  1841. 10  Down to the minimum
  1842. ***********************
  1843.  
  1844. Im folgenden sind noch einmal die Messages aufgelistet, die Server
  1845. bzw. Client minimal unterstützen müssen, um eine korrekte
  1846. Protokollbehandlung zu gewährleisten.
  1847.  
  1848.  
  1849. 10.1  Server
  1850. ============
  1851.  
  1852.    ∙ OLE_INIT verschicken
  1853.  
  1854.    ∙ OLE_NEW auswerten
  1855.  
  1856.    ∙ OLGA_INIT empfangen
  1857.  
  1858.    ∙ OLE_EXIT verschicken
  1859.  
  1860.    ∙ VA_START unterstützen (s. Gemini-Doku, AV-Protokoll)
  1861.  
  1862. Damit der Server auch wirklich als solcher fungiert, muß natürlich
  1863. noch die Message OLGA_UPDATE verschickt werden.
  1864.  
  1865.  
  1866. 10.2  Client
  1867. ============
  1868.  
  1869.    ∙ OLE_INIT verschicken
  1870.  
  1871.    ∙ OLE_NEW auswerten
  1872.  
  1873.    ∙ OLGA_INIT empfangen
  1874.  
  1875.    ∙ OLE_EXIT verschicken
  1876.  
  1877.    ∙ auf OLGA_RENAMELINK mit OLGA_LINKRENAMED antworten
  1878.  
  1879.    ∙ auf OLGA_LINKBROKEN mit OLGA_UNLINK antworten
  1880.  
  1881. Ein Client sollte sinnvollerweise auch auf OLGA_UPDATED reagieren.
  1882.  
  1883.  
  1884.  
  1885. 11  Abschließende Hinweise
  1886. **************************
  1887.  
  1888. Alle Zeichenketten sind nullterminiert. Wenn Mxalloc() vorhanden ist
  1889. und die MemoryProtection-Bits gesetzt werden können, müssen die
  1890. Pointer auf global gesetzt werden!!! Ich weiß, daß die Übergabe von
  1891. Pointern in AES-Messages nicht das absolut Beste ist, es ist aber
  1892. sicher sehr einfach zu implementieren und funktioniert bei anderen
  1893. Protokollen in der Praxis auch ohne Probleme. Wer ganz sicher gehen
  1894. will, kann später mit OL_PIPES auf MTOS- D&D-Pipes umschalten (pro
  1895. Applikation, der Manager kümmert sich dann um die korrekte
  1896. Kommunikation).
  1897.  
  1898. Wichtig: Dieser Mechanismus ersetzt nicht die AV_PATH_UPDATE-,
  1899. SH_WDRAW- oder SC_CHANGED-Message!
  1900.  
  1901. In der Maus KA (0721-358887) liegt das Archiv OLGA.LZH mit einem
  1902. OLGA-Manager. Mitgeliefert wird auch eine Debugversion, die alle
  1903. eingehenden (und auch einige der verschickten) Nachrichten mit ihren
  1904. Parametern direkt auf CON: schreibt, so daß man recht einfach die
  1905. Kommunikation zwischen den beteiligten Applikationen überprüfen kann.
  1906.  
  1907. Die OLGA-Disribution ist (auch für kommerzielle Software) Freeware!
  1908.  
  1909. Diese Dokumentation wurde mit UDO5 geschrieben.
  1910.  
  1911. Alle Angaben ohne Gewähr, Änderungen vorbehalten.
  1912.  
  1913.  
  1914.  
  1915.  
  1916. A  FAQ
  1917. ******
  1918.  
  1919.   1. Wo bekomme ich die aktuellsten Informationen über OLGA?
  1920.  
  1921.      Im WorldWideWeb. Adresse siehe "Kontakt".
  1922.  
  1923.   2. Ich besitze kein Multitaskingbetriebssystem wie MultiTOS, MagiC
  1924.      oder N.AES. Wie kann ich OLGA einsetzen?
  1925.  
  1926.      Leider gar nicht. Ohne Multitasking macht OLGA aber auch keinen
  1927.      Sinn, da nicht mehrere Hauptapplikationen gleichzeitig laufen
  1928.      können.
  1929.  
  1930.   3. Was muß ich tun, damit OLGA auf meinem 1MB Atari läuft?
  1931.  
  1932.      Eine Speichererweiterung kaufen.
  1933.  
  1934.   4. Mein Programm kommt mit langen Dateinamen zurecht, die auch
  1935.      Kleinschreibung enthalten dürfen. Dürfen die Extensions in
  1936.      OLGA.INF ebenfalls klein geschrieben werden?
  1937.  
  1938.      Nein, alle Extensions (egal ob in OLGA.INF oder bei einer
  1939.      Message) müssen immer in Großbuchstaben angegeben werden.
  1940.  
  1941.   5. Wenn ich OLGA unter MiNT einsetze, bekomme ich eine
  1942.      Speicherschutzverletzung.
  1943.  
  1944.      Wie auch z.B. beim AV- und SE-Protokoll müssen in Pointern
  1945.      übergebene Speicherbereiche global lesbar sein, also mit
  1946.      Mxalloc() angefordert werden.
  1947.  
  1948. ...wird bei Gelegenheit fortgesetzt.
  1949.  
  1950.  
  1951.  
  1952. B  Glossar
  1953. **********
  1954.  
  1955.  ActiveX
  1956.  
  1957.      Microsofts Objekt-Modell mit Internet-Technologien. Hieß mal
  1958.      OLE/COM.
  1959.  
  1960.  Client
  1961.  
  1962.      Dienstenehmer
  1963.  
  1964.  ID4
  1965.  
  1966.      ID4-OLGA, "InplaceDrawing for OLGA"
  1967.  
  1968.  NULL
  1969.  
  1970.      Null-Pointer
  1971.  
  1972.  OLE
  1973.  
  1974.      Microsofts "Object Linking & Embedding"
  1975.  
  1976.  OLE/COM
  1977.  
  1978.      Microsofts "Component Object Model" samt einiger darauf
  1979.      aufbauender Technologien. Heißt jetzt ActiveX.
  1980.  
  1981.  OLGA
  1982.  
  1983.      "Object Linking for GEM Applications"
  1984.  
  1985.  Server
  1986.  
  1987.      Dienstegeber
  1988.  
  1989. ...wird ausgebaut.
  1990.  
  1991.  
  1992.  
  1993. C  Liste der OLGA-Applikationen
  1994. *******************************
  1995.  
  1996. Stand: 05. Dezember 1996
  1997.  
  1998.  
  1999. +-----------+-------+---------------------+--------+------+---------+----------+
  2000. | Programm  |  ab   | Autor               |  Cl.   | Srv. | ID4-Cl. | ID4-Srv. |
  2001. +-----------+-------+---------------------+--------+------+---------+----------+
  2002. | ArtWorx   |  1.0  | Christian Witt      |   *    |  *   |         | ab 1.14  |
  2003. +-----------+-------+---------------------+--------+------+---------+----------+
  2004. | CAB       |  1.2  | Alexander Clauss    |   *    |      |         |          |
  2005. +-----------+-------+---------------------+--------+------+---------+----------+
  2006. | Focus 3D  | 1.50  | Ralf Trinler        |        |  *   |         |          |
  2007. +-----------+-------+---------------------+--------+------+---------+----------+
  2008. | GEM-Look  | 12/95 | Rolf Kotzian        |   *    |      |         |          |
  2009. +-----------+-------+---------------------+--------+------+---------+----------+
  2010. | IdeaList  | 3.71  | Christoph Bartholme |   *    |      |         |          |
  2011. +-----------+-------+---------------------+--------+------+---------+----------+
  2012. | Kandinsky |  2.0  | Ulrich Roßgoderer   |   *    |  *   |         |          |
  2013. +-----------+-------+---------------------+--------+------+---------+----------+
  2014. | Papillon  |  2.3  | Dirk Sabiwalsky     |        |  *   |         |          |
  2015. +-----------+-------+---------------------+--------+------+---------+----------+
  2016. | PixArt    | 3.32  | Mario Meißner       |        |  *   |         |          |
  2017. +-----------+-------+---------------------+--------+------+---------+----------+
  2018. | qed       | 3.90  | Christian Felsch    |        |  *   |         |          |
  2019. +-----------+-------+---------------------+--------+------+---------+----------+
  2020. | STELLA    |  2.0  | Thomas Künneth      |   *    |  *   |         |          |
  2021. +-----------+-------+---------------------+--------+------+---------+----------+
  2022. | Texel     |  1.0  | Thomas Much         | ab 1.5 |  *   | ab 1.5  |          |
  2023. +-----------+-------+---------------------+--------+------+---------+----------+
  2024.  
  2025.            Tabelle 2: Folgende Programme unterstützen OLGA
  2026.  
  2027.  
  2028.  
  2029.              +------------+------------+----------------+
  2030.              | Library    | ab Version | Autor          |
  2031.              +------------+------------+----------------+
  2032.              | OLGA-C-Lib |            | Thomas Künneth |
  2033.              +------------+------------+----------------+
  2034.              | ObjectGEM  | 1.21-beta  | Thomas Much    |
  2035.              +------------+------------+----------------+
  2036.              +------------+------------+----------------+
  2037.  
  2038.            Tabelle 3: Folgende Libraries unterstützen OLGA
  2039.  
  2040.  
  2041.  
  2042.                  +------------+------------+-------+
  2043.                  | Programm   | ab Version | Autor |
  2044.                  +------------+------------+-------+
  2045.                  | TempusWord |            | CCD   |
  2046.                  +------------+------------+-------+
  2047.  
  2048. Tabelle 4: Für folgende Programme ist eine OLGA-Anpassung angekündigt
  2049.  
  2050.  
  2051.  
  2052.  
  2053. D  Dateien
  2054. **********
  2055.  
  2056.  
  2057. D.1  OLGA.H
  2058. ===========
  2059.  
  2060.  
  2061. /* OLGA Rev 1.2 (11/20/96)                       */
  2062. /* Thomas_Much@ka2.maus.de                       */
  2063. /* http://www.uni-karlsruhe.de/~Thomas.Much/OLGA */
  2064.  
  2065. #ifndef OLGA_H
  2066. #define OLGA_H
  2067.  
  2068.  
  2069. #define OLE_INIT                 0x4950
  2070. #define OLE_EXIT                 0x4951
  2071. #define OLE_NEW                  0x4952
  2072.  
  2073. #define OLGA_INIT                0x1236
  2074. #define OLGA_UPDATE              0x1238
  2075. #define OLGA_ACK                 0x1239
  2076. #define OLGA_RENAME              0x123a
  2077. #define OLGA_OPENDOC             0x123b
  2078. #define OLGA_CLOSEDOC            0x123c
  2079. #define OLGA_LINK                0x123d
  2080. #define OLGA_UNLINK              0x123e
  2081. #define OLGA_UPDATED             0x123f
  2082. #define OLGA_RENAMELINK          0x1240
  2083. #define OLGA_LINKRENAMED         0x1241
  2084. #define OLGA_GETOBJECTS          0x1242
  2085. #define OLGA_OBJECTS             0x1243
  2086. #define OLGA_BREAKLINK           0x1244
  2087. #define OLGA_LINKBROKEN          0x1245
  2088. #define OLGA_START               0x1246
  2089. #define OLGA_GETINFO             0x1247
  2090. #define OLGA_INFO                0x1248
  2091. #define OLGA_IDLE                0x1249
  2092. #define OLGA_ACTIVATE            0x124a
  2093. #define OLGA_EMBED               0x124b
  2094. #define OLGA_EMBEDDED            0x124c
  2095. #define OLGA_UNEMBED             0x124d
  2096. #define OLGA_GETSETTINGS         0x124e
  2097. #define OLGA_SETTINGS            0x124f
  2098. #define OLGA_REQUESTNOTIFICATION 0x1250
  2099. #define OLGA_RELEASENOTIFICATION 0x1251
  2100. #define OLGA_NOTIFY              0x1252
  2101. #define OLGA_NOTIFIED            0x1253
  2102. #define OLGA_SERVERTERMINATED    0x1254
  2103. #define OLGA_CLIENTTERMINATED    0x1255
  2104. #define OLGA_INPLACEUPDATE       0x1256
  2105.  
  2106.  
  2107. #define OL_SERVER                0x0001
  2108. #define OL_CLIENT                0x0002
  2109. #define OL_PEER                  (OL_SERVER | OL_CLIENT)
  2110. #define OL_IDLE                  0x0800
  2111. #define OL_PIPES                 0x1000
  2112. #define OL_START                 0x2000
  2113. #define OL_MANAGER               0x4000
  2114. #define OL_OEP                   0x0001
  2115.  
  2116. #define OLS_TYPE                      1
  2117. #define OLS_EXTENSION                 2
  2118. #define OLS_NAME                      3
  2119.  
  2120.  
  2121. typedef struct
  2122. {
  2123.         int x,y,w,h,
  2124.             x1,y1,x2,y2;
  2125. } GRECT;
  2126.  
  2127.  
  2128. typedef struct
  2129. {
  2130.         long         magic;
  2131.         unsigned int version,
  2132.                      skip;
  2133. } OLGAInfHeader;
  2134.  
  2135.  
  2136. typedef struct
  2137. {
  2138.         long id,
  2139.              length;
  2140. } OLGABlockHeader;
  2141.  
  2142.  
  2143. typedef struct ObjectInfo
  2144. {
  2145.         char  *Filename;
  2146.         AESPB *ClientGEMPB;
  2147.         long   ClientData,
  2148.                ServerData;
  2149.         int    CBLock,
  2150.                CBCount;
  2151.         void   cdecl (*CBDraw)    (ObjectInfo *objectinfo,
  2152.                                    int outScreen,
  2153.                                    int outHandle,
  2154.                                    int outDevID,
  2155.                                    GRECT *Size,
  2156.                                    GRECT *Clip);
  2157.         void   cdecl (*CBUnembed) (ObjectInfo *objectinfo);
  2158. } OLGAObjectInfo;
  2159.  
  2160.  
  2161. #endif
  2162.  
  2163.  
  2164.  
  2165. D.2  OLGA.INC
  2166. =============
  2167.  
  2168.  
  2169. {* OLGA Rev 1.2 (11/20/96)                       *
  2170.  * Thomas_Much@ka2.maus.de                       *
  2171.  * http://www.uni-karlsruhe.de/~Thomas.Much/OLGA *}
  2172.  
  2173. const
  2174.  
  2175.         OLE_INIT                 = $4950;
  2176.         OLE_EXIT                 = $4951;
  2177.         OLE_NEW                  = $4952;
  2178.  
  2179.         OLGA_INIT                = $1236;
  2180.         OLGA_UPDATE              = $1238;
  2181.         OLGA_ACK                 = $1239;
  2182.         OLGA_RENAME              = $123a;
  2183.         OLGA_OPENDOC             = $123b;
  2184.         OLGA_CLOSEDOC            = $123c;
  2185.         OLGA_LINK                = $123d;
  2186.         OLGA_UNLINK              = $123e;
  2187.         OLGA_UPDATED             = $123f;
  2188.         OLGA_RENAMELINK          = $1240;
  2189.         OLGA_LINKRENAMED         = $1241;
  2190.         OLGA_GETOBJECTS          = $1242;
  2191.         OLGA_OBJECTS             = $1243;
  2192.         OLGA_BREAKLINK           = $1244;
  2193.         OLGA_LINKBROKEN          = $1245;
  2194.         OLGA_START               = $1246;
  2195.         OLGA_GETINFO             = $1247;
  2196.         OLGA_INFO                = $1248;
  2197.         OLGA_IDLE                = $1249;
  2198.         OLGA_ACTIVATE            = $124a;
  2199.         OLGA_EMBED               = $124b;
  2200.         OLGA_EMBEDDED            = $124c;
  2201.         OLGA_UNEMBED             = $124d;
  2202.         OLGA_GETSETTINGS         = $124e;
  2203.         OLGA_SETTINGS            = $124f;
  2204.         OLGA_REQUESTNOTIFICATION = $1250;
  2205.         OLGA_RELEASENOTIFICATION = $1251;
  2206.         OLGA_NOTIFY              = $1252;
  2207.         OLGA_NOTIFIED            = $1253;
  2208.         OLGA_SERVERTERMINATED    = $1254;
  2209.         OLGA_CLIENTTERMINATED    = $1255;
  2210.         OLGA_INPLACEUPDATE       = $1256;
  2211.  
  2212.         OL_SERVER                = $0001;
  2213.         OL_CLIENT                = $0002;
  2214.         OL_PEER                  = OL_SERVER or OL_CLIENT;
  2215.         OL_IDLE                  = $0800;
  2216.         OL_PIPES                 = $1000;
  2217.         OL_START                 = $2000;
  2218.         OL_MANAGER               = $4000;
  2219.         OL_OEP                   = $0001;
  2220.  
  2221.         OLS_TYPE                 =     1;
  2222.         OLS_EXTENSION            =     2;
  2223.         OLS_NAME                 =     3;
  2224.  
  2225.  
  2226. type
  2227.  
  2228.         GRECTPtr = ^GRECT;
  2229.         GRECT    = record
  2230.                 X,Y,W,H,
  2231.                 X1,Y1,X2,Y2: integer
  2232.         end;
  2233.  
  2234.         POLGAInfHeader = ^TOLGAInfHeader;
  2235.         TOLGAInfHeader = record
  2236.                 Magic  : array [0..3] of char;
  2237.                 Version,
  2238.                 Skip   : word
  2239.         end;
  2240.  
  2241.         POLGABlockHeader = ^TOLGABlockHeader;
  2242.         TOLGABlockHeader = record
  2243.                 ID    : array [0..3] of char;
  2244.                 Length: longint
  2245.         end;
  2246.  
  2247.         POLGAObjectInfo = ^TOLGAObjectInfo;
  2248.         TOLGAObjectInfo = record
  2249.                 Filename   : PChar;
  2250.                 ClientGEMPB: AESPBPtr;
  2251.                 ClientData,
  2252.                 ServerData : longint;
  2253.                 CBLock,
  2254.                 CBCount    : integer;
  2255.                 CBDraw     : procedure(d1,d2: pointer; d3,d4,d5: longint;
  2256.                                        objectinfo: POLGAObjectInfo;
  2257.                                        outScreen,
  2258.                                        outHandle,
  2259.                                        outDevID: integer;
  2260.                                        Size,
  2261.                                        Clip: GRECTPtr);
  2262.                 CBUnembed  : procedure(d1,d2: pointer; d3,d4,d5: longint;
  2263.                                        objectinfo: POLGAObjectInfo);
  2264.         end;
  2265.  
  2266.  
  2267.  
  2268. D.3  OLGA.INF
  2269. =============
  2270.  
  2271.  
  2272. ;Dies ist die OLGA-Manager-Konfigurationsdatei.
  2273. ;Sie muß im Wurzelverzeichnis des Bootlaufwerks,
  2274. ;in $HOME/defaults oder in $HOME stehen.
  2275.  
  2276. ;ACHTUNG: Der Minimalmanager reagiert allergisch auf einen
  2277. ;falschen Aufbau dieser Datei!!! Kommentare beginnen mit
  2278. ;einem Semikolon am Zeilenanfang, Leerzeilen dürfen nur
  2279. ;aus CR/LF bestehen. Alle Einträge müssen am Zeilenanfang
  2280. ;stehen, zusätzliche Leerzeichen o.ä. sind _nicht_ erlaubt.
  2281. ;Programmnamen sind immer absolut, d.h. mit Pfad und Lauf-
  2282. ;werk.
  2283.  
  2284. [Extensions]
  2285. ;Wildcards sind nicht erlaubt!
  2286. ;Extensions sind (mit Punkt) maximal vier Zeichen lang
  2287. .TAD=$ARTWORX
  2288. .CWG=$ARTWORX
  2289. .GEM=$ARTWORX
  2290. .CVG=$ARTWORX
  2291. .AI=$ARTWORX
  2292. .SDB=$STELLA
  2293. .TXL=$TEXEL
  2294. .DIF=$TEXEL
  2295. .CSV=$TEXEL
  2296. .XLS=$TEXEL
  2297. .HTM=$CAB
  2298. .TXT=$QED
  2299. .ASC=$QED
  2300. .IMG=$PAPILLON
  2301. .TIF=$PAPILLON
  2302. .JPG=$PAPILLON
  2303. .GIF=$PAPILLON
  2304.  
  2305. [Objects]
  2306. ;zu den folgenden Extensions existieren ID4-Server
  2307. ;die Extensions müssen auch im vorigen Abschnitt definiert sein!
  2308. .CWG=ArtWorx-Dokument
  2309. .CVG=Calamus-Dokument
  2310. .GEM=GEM Metafile
  2311. .AI=Adobe Illustrator-Dokument
  2312. .TAD=Texel-Diagramm
  2313.  
  2314. [Types]
  2315. ;XAcc-Typen, siehe OLGAPROT.TXT; sie sind _exakt_ zwei
  2316. ;Zeichen lang (Groß-/Kleinschreibung beachten!)
  2317. SS=$TEXEL
  2318. VG=$ARTWORX
  2319. RG=$PAPILLON
  2320. GG=$STELLA
  2321. ED=$QED
  2322.  
  2323. [Applications]
  2324. ;hier werden Aliase festgelegt, die als Abkürzungen (mit einem
  2325. ;führenden $, s.o.) verwendet werden /können/ (nicht müssen).
  2326. ;Verschachtelungen sind erlaubt, aber man muß selbst darauf
  2327. ;achten, keine Endlosschleifen zu erzeugen.
  2328. ;Groß-/Kleinschreibung wird beachtet!
  2329. TEXEL=C:\Programm\PP\PRGS\texel.app
  2330. STELLA=C:\Programm\STELLA\STELLA.APP
  2331. ARTWORX=C:\Programm\ArtWorx\ARTWORX.PRG
  2332. IDEALIST=C:\Tools\IdeaList\IDEALIST.PRG
  2333. CAB=C:\Programm\WWW\CAB\CAB.APP
  2334. QED=C:\Diverses\qed\qed.app
  2335. PAPILLON=C:\Programm\PAPILLON\PAPILLON.PRG
  2336.  
  2337.  
  2338.  
  2339.  
  2340. E  History
  2341. **********
  2342.  
  2343.  Rev 1.2 (20.11.96)
  2344.  
  2345.         ∙ OLGA_CLIENTTERMINATED, OLGA_SERVERTERMINATED
  2346.  
  2347.         ∙ Idle-Test (OLGA_IDLE)
  2348.  
  2349.         ∙ Notification-Erweiterung (OLGA_REQUESTNOTIFICATION,
  2350.           OLGA_RELEASENOTIFICATION, OLGA_NOTIFY, OLGA_NOTIFIED)
  2351.  
  2352.         ∙ InplaceDrawing: "ID4-OLGA" (OLGA_GETOBJECTS, OLGA_OBJECTS,
  2353.           OLGA_ACTIVATE, OLGA_EMBED, OLGA_EMBEDDED, OLGA_UNEMBED,
  2354.           OLGA_INPLACEUPDATE, OLGAObjectInfo, CBDraw, CBUnembed)
  2355.  
  2356.         ∙ Konfigurationsabfrage (OLGA_GETSETTINGS, OLGA_SETTINGS)
  2357.  
  2358.  Rev 1.1 (24.07.96)
  2359.  
  2360.         ∙ neuer Block 'ICON' bei OLGA-Info-Dateien
  2361.  
  2362.         ∙ nach OLGA_OPENDOC wird OLGA_ACK verschickt
  2363.  
  2364.         ∙ OL_PEER
  2365.  
  2366.  Rev 1.0 (24.01.96)
  2367.  
  2368.         ∙ msg[6] des Kommandozeilen-OLGA_ACK nach OLGA_START angepaßt
  2369.  
  2370.         ∙ ab sofort wird Multitasking vorausgesetzt, die Messages
  2371.           OLGA_BLOCK und OLGA_UNBLOCK entfallen damit
  2372.  
  2373.  Rev 0.9 (10.11.95)
  2374.  
  2375.         ∙ die OLE-Messages haben neue Nummern bekommen
  2376.  
  2377.  Rev 0.8 (05.11.95)
  2378.  
  2379.         ∙ Konzept für Info-Dateien, Dateiformat s.o.
  2380.  
  2381.         ∙ dafür Erweiterung von OLGA_UPDATE und OLGA_UPDATED
  2382.  
  2383.         ∙ neue Messages OLGA_GETINFO und OLGA_INFO
  2384.  
  2385.  Rev 0.7 (09.04.95)
  2386.  
  2387.         ∙ OLE-Initialisierung (OEP/OLGA)
  2388.  
  2389.         ∙ die OLGA_INIT-Message von der Applikation an den Manager
  2390.           wird durch OLE_INIT ersetzt
  2391.  
  2392.         ∙ der Manager übergibt in OLGA_INIT nicht mehr seinen Namen
  2393.  
  2394.         ∙ OLGA_EXIT heißt nun OLE_EXIT, OLGA_NEW heißt OLE_NEW
  2395.  
  2396.         ∙ bei OLGA_OPENDOC wird kein Dokumentname mehr übergeben
  2397.  
  2398.  Rev 0.6 (nicht öffentlich)
  2399.  
  2400.         ∙ Nachstarten des Managers (siehe OLGA_INIT) mit shel_write
  2401.  
  2402.         ∙ automatisches Terminieren
  2403.  
  2404.         ∙ OLGA_EXIT beim Manager-Shutdown
  2405.  
  2406.         ∙ OLGA_NEW
  2407.  
  2408.  Rev 0.5 (01.03.95)
  2409.  
  2410.         ∙ OL_START, OLGA_START
  2411.  
  2412.         ∙ OL_PIPES
  2413.  
  2414.         ∙ beim Programmende dürfen OLGA_CLOSEDOC, OLGA_UNLINK nicht
  2415.           verwendet werden, OLGA_EXIT kümmert sich um alles
  2416.  
  2417.         ∙ OLGA_ACK wird nach OLGA_CLOSEDOC verschickt
  2418.  
  2419.         ∙ Applikationen sollten bei OLGA_INIT einen XAcc-Programmtyp
  2420.           angeben
  2421.  
  2422.  Rev 0.4 (07.01.95)
  2423.  
  2424.         ∙ OLGA_BREAKLINK, OLGA_LINKBROKEN sind neu
  2425.  
  2426.  Rev 0.3 (04.01.95)
  2427.  
  2428.         ∙ OLGA_RENAMED heißt nun OLGA_RENAMELINK
  2429.  
  2430.         ∙ OLGA_LINKRENAMED ist dazugekommen, dadurch haben sich die
  2431.           Nummern von OLGA_BLOCK/OLGA_UNBLOCK verschoben
  2432.  
  2433.  Rev 0.2
  2434.  
  2435.         ∙ komplette Überarbeitung gegenüber dem GOLEM-Vorschlag
  2436.  
  2437.  Davor...
  2438.  
  2439.      ...stand ein Erlebnis auf der ProTOS '94 in Hennef. Ulrich
  2440.      Roßgoderer, Thomas Künneth und ich zeigten auf dem Stand von
  2441.      Delta Labs unsere Shareware, die zu dieser Zeit in der
  2442.      Whiteline-Serie verkauft wurde. Uli und Tommi hatten zwischen
  2443.      Kandinsky und STELLA einen Update- Mechanismus eingerichtet, der
  2444.      dasselbe Ergebnis wie OLGA_UPDATE erzielte. Dieser Mechanismus
  2445.      hatte allerdings den Nachteil, daß der Server irgendwie bekannt
  2446.      sein mußte und nicht automatisch von einem Manager gesucht wurde.
  2447.  
  2448.      Da ich damals gerade einen ObjectLinking-Mechanismus für
  2449.      ObjectGEM plante (GOLEM), um ihn als Grundlage für Texel (das
  2450.      damals in einer ganz frühen Alpha-Version vorlag) verwenden zu
  2451.      können, bot es sich an, beide Ideen zu kombinieren. So entstand
  2452.      OLGA.
  2453.  
  2454.  
  2455.  
  2456. F  Künftige Weiterentwicklungen
  2457. *******************************
  2458.  
  2459. Zwei große Aufgaben sind 1997 zu lösen. Zum einen sollte das
  2460. InplaceDrawing zu InplaceActivation ausgebaut werden, d.h. der
  2461. Benutzer sollte fremde Dokumente in einer Applikation nicht nur
  2462. angezeigt bekommen, sondern sie auch dort direkt bearbeiten können -
  2463. mit den Routinen des ID4-Servers.
  2464.  
  2465. Zum anderen ist es überlegenswert, GEM ein Objekt-Modell zur Verfügung
  2466. zu stellen, um solche Aktionen wie ID4 und InplaceActivation zu
  2467. verallgemeinern. Denkbar wäre so ein "GEM Component Object Model"
  2468. (GCOM) beispielsweise auf der Grundlage von OLE/COM bzw. ActiveX.
  2469. Weitere Informationen dazu liegen im Web auf http://www.activex.org.
  2470.  
  2471. Für Programmierer gibt es eine OLGA-Mailingliste, um diese
  2472. Erweiterungen diskutieren (und allgemeine Fragen zu OLGA beantworten)
  2473. zu können. Wer daran teilnehmen möchte, meldet sich bitte bei mir
  2474. (siehe "Kontakt").
  2475.  
  2476.  
  2477.  
  2478. G  Kontakt
  2479. **********
  2480.  
  2481.  
  2482. Thomas Much, Gerwigstraße 46, D-76131 Karlsruhe, Germany
  2483.  
  2484. Fax:       +49 / (0)721 / 62 28 21
  2485.  
  2486. EMail:     Thomas Much @ KA2                 (MausNet)
  2487.            Thomas_Much@ka2.maus.de
  2488.            Thomas.Much@stud.uni-karlsruhe.de (Internet)
  2489.  
  2490. WWW:       http://www.uni-karlsruhe.de/~Thomas.Much/OLGA
  2491.  
  2492. Newsgroup: OLGA @ ASH (+49 / (0)6221 / 30 36 71)
  2493.  
  2494.  
  2495.  
  2496. H  Rechtliches
  2497. **************
  2498.  
  2499. Der OLGA-Manager ist mit allen zugehörigen Dateien Freeware - dies
  2500. wird auch in Zukunft so bleiben. Er darf auch einzeln und auch mit
  2501. kommerziellen Programmen ohne Zahlung von Lizenzgebühren weitergegeben
  2502. werden! Gegen einen Hinweis in der Distribution auf den Autor und die
  2503. OLGA-Homepage bzw. eine Benachrichtigung an mich (s. "Kontakt") im
  2504. Falle einer solchen Nutzung hätte ich allerdings nichts einzuwenden.
  2505.  
  2506. Da OLGA ein Standard sein soll, wäre es schön, wenn niemand das
  2507. Protokoll eigenmächtig verändert, sondern alle Erweiterungswünsche mit
  2508. mir abspricht.
  2509.  
  2510. Die Haftung für Schäden, die sich mittelbar oder unmittelbar aus der
  2511. Nutzung dieser Dokumentation und des OLGA-Paketes ergeben, ist
  2512. ausgeschlossen.
  2513.  
  2514. Alle Angaben ohne Gewähr, Änderungen vorbehalten.
  2515.  
  2516.  
  2517.  
  2518. I  Dank
  2519. *******
  2520.  
  2521. Ein besonderer Dank geht an
  2522.  
  2523.    ∙ Ulrich "Kandinsky" Roßgoderer für die Unterstützung bei der
  2524.      Definition von OLGA
  2525.  
  2526.    ∙ Thomas "STELLA" Künneth für die Unterstützung bei der Definition
  2527.      von OLGA, für seinen "OLGAnisator", seine OLGA-C-Library sowie
  2528.      für sein Drängeln bei der Notification-Erweiterung
  2529.  
  2530.    ∙ Christian "ArtWorx" Witt für die Mitarbeit bei InplaceDrawing
  2531.      (ID4-OLGA)
  2532.  
  2533.    ∙ Dirk "U." Hagedorn für UDO5.
  2534.  
  2535.  
  2536.  
  2537.  
  2538.